
数据结构
爱学习鸭
这个作者很懒,什么都没留下…
展开
-
删除单链表中值相同的结点
1.带头结点递增有序单链表L,删除表中相同元素void Delete(LinkList &L){ LinkList p=L->next; LinkList q; while(q){ q=p->next; if(p->data!=q->data){ p=p->next; q=q->next; } else{ p->next=q->next; free(q); } }} 2原创 2020-12-01 14:46:17 · 5881 阅读 · 5 评论 -
在二叉排序树bt中删除结点值为k的结点
int DeleteBinSTree(BinSTree &bt,KeyType k){ //二叉排序树bt中删除结点值为k的结点 BinSTree p,q,f,s; p=bt; while(p!=NULL&&p->data!=k){ //找到值为k的结点p f=p; //指向待删结点p的双亲结点 if(p->data<k) p=p->lchild; //结点值为k的结点在当前结点p的左子树上 .原创 2020-11-29 12:05:38 · 1192 阅读 · 0 评论 -
数据结构——树例题1
1.设计算法返回二叉树T中先序遍历的最后一个结点,非递归方式BTree prelast(BTree T){ BTree p=T; while(p->child!=NULL&&p->rchild!=NULL){ //当前结点有孩子就循环(先序遍历的最后一个结点一定为叶子结点) ,非叶子结点肯定不是最后一个结点 if(p->rchild){ //如果有右孩子,右孩子肯定在先序序列中当前节点之后(如果再有左孩子,右孩子也在整个左子树之后)原创 2020-11-25 16:31:06 · 289 阅读 · 0 评论 -
数据结构——链表例题3
11.已知A、B是两个递增有序的单链表,设计算法利用原表结点空间将其合并为一个递增有序的链表LinkList T_11(LinkList *A,LinkList *B){ //选取AB中较小的结点,尾插法插入C中 LinkList pa=A->next; LinkList pb=B->next; LinkList C=(LinkList *)malloc(sizeof(LinkList)); //创建带头结点的链表C C->next=NULL; LinkList原创 2020-11-23 15:00:06 · 463 阅读 · 0 评论 -
数据结构——链表例题2
6.递增有序链表A、B分别表示一个集合,设计算法实现A=A∩B,即使用原表空间LinkList insert_Link_2(LinkList *A,LinkList *B){ //以带头结点的链表为例 LinkList pa=A->next; LinkList pre=A; //pre指向pa的前驱结点 LinkList q; LinkList pb=B->next; while(pa!=NULL&&pb!=NULL){ i原创 2020-11-23 10:57:46 · 1091 阅读 · 1 评论 -
数据结构——链表例题1
1.在递增有序链表L中插入值为x的元素,使L依旧保持递增void Insert(LinkList *L,DataType x){ LinkList p=L,q=p->next,s; while(x>q->data&&q!=NULL){ //q可能为空,插入到表尾 p=p->next; q=p->next; } s=(LinkList*)malloc(sizeof(LinkList)); s->data=x; s->n原创 2020-11-22 14:44:00 · 1810 阅读 · 0 评论 -
数据结构例题8
1.已知n个结点的完全二叉树用顺序存贮,试设计非递归算法,对该完全二叉树进行中序遍历。void InOrder(QBTree BT[],int n){ int i=1; PSeqStack s; s=Init_SeqStack(); while(i<=n||!Empty_SeqStack(s)){ if(i<=n){ Push_SeqStack(s,i); i=i*2; //访问左子树 } else{ Pop_SeqSta原创 2020-11-21 14:50:05 · 657 阅读 · 0 评论 -
数据结构例题7
1、设以带头结点的双向循环链表表示的线性表L=(a1,a2,…,an),试写一算法,将L改造为L=(a1,a3,…,an…,a4,a2)。void Exchange_DLinkList(DLinkList &L){ DLinkList p,q,tail; int count=0; //count记录数组下标;当数组下标为偶数时,当前结点移动到an后 p=L->next; tail=L->prior; //tail指向表尾结点an wh原创 2020-11-20 15:37:34 · 1108 阅读 · 0 评论 -
数据结构例题6
1、一个带头结点的单链表A,其数据元素是字符字母字符、数字字符、其他字符,设计算法将A表分成三个带头结点的循环单链表A、B和C,分别含有字母、数字和其它符号的同一类字符,利用原表空间。void split(LinkList &A){ // A是带头结点的的单链表,其数据元素是字符字母、字符、数字字符、其他字符。 LinkList p=A->next,pre,rearB,rearC; // p为工作指针,指向A表的当前元素,rearB,rearC分别为原创 2020-11-19 16:49:09 · 602 阅读 · 0 评论 -
数据结构例题5
1、已知非空线性链表由list指出,链结点的构造为(data,link).请写一算法,将链表中数据域值最小的那个链结点移到链表的最前面。要求:不得额外申请新的链结点。//以带头结点的链表为例void Find_min(LinkList *L){ LinkList p,min,first; DataType x; p=L->link; min=L->link; //min指向当前数据域最小的结点 first=L->link; //first指向第一原创 2020-11-19 16:46:11 · 3330 阅读 · 0 评论 -
数据结构例题4
1、设L为带头结点的单链表,单链表L元素递增有序,编写算法,删除表L中值相同的多余元素。bool Delete_sort(LinkList *L){ LinkList p,q,temp; p=L->next; //注意单链表带头结点 if(p=NULL) return 0; //空表 q=p->next; //q指向p的后继 while(q){ if(p->data!=q->data){ //p->data,q->dat原创 2020-11-19 16:43:51 · 683 阅读 · 0 评论 -
数据结构例题3
1.设str1和str2分别是指向两个单词所在单链表的头结点,请设计一个时间上尽可能高效的算法,找出str1和str2所指向两个链表共同后缀的起始位置(如上图中指针p所指向的结点位置)。int length(LinkList H){ //求链表长度 LinkList p=H; int count=0; while(p->next!=NULL){ //!!!!!!!!!带头结点,头结点不算在链表长度里,所以count少加 1 p=p->next; count++;} r原创 2020-11-19 16:41:19 · 240 阅读 · 0 评论 -
数据结构例题2
1.设计求结点在二叉排序树中层次的算法。int BstSearch(BSTree bst,BSTNode k){ //求结点k在二叉排序树中的层次 BSTree p=bst; int n=0; //记录结点的层数 while(p!=NULL&&p->data!=k->data) { //p不为空,且未找到k if(p->data>k->data) p=p->lchild; else p=p->rchild; n原创 2020-11-19 16:39:32 · 1532 阅读 · 1 评论 -
数据结构例题1
1.定义正读和反读都相同的字符序列为“回文”,例如,“abcdcba”是回文,“ashgash”不是回文。试写一个算法判断读入的一个以‘@’为结束符的字符序列是否为回文。int IsReverse(){ PseqStack S; PseqQueue Q; char e,x,y; S=Init_SeqStack(); //初始化栈 S Q=Init_SeqQueue(); //初始化队列 Q While((e=getchar())!='@'){ //遇到@停止输入 Pus.原创 2020-11-19 16:37:03 · 1036 阅读 · 0 评论