数据结构_2:链表:C语言练习
来源:互联网 发布:中国软件增发价 编辑:程序博客网 时间:2024/05/24 02:35
- 带头结点的单链表中,删除所有值为x的节点,释放其空间
//用p从头到尾扫描单链表,pre指向*p节点的前驱。若p的节点是x则删除,并让p后移,否则,pre和p同时移动void Del_x_1(LinkList &L,ElemType x){ LNode *p=L->next,*pre=L,*q; while(p!=NULL) { if(p->data=x) { q=p; p=p->next; pre->next=p; free(q); } else { pre=p; p=p->next; } }}//尾插法:值不为x则接入L,否则释放void Del_x_2(LinkList &L,ElemType x){ LNode *p=L->next,*r=L,*q; while(p!=NULL) { if(p->data!=x) { r->next=p; r=p; p=p->next; } else { q=p; p=p->next; free(q); } }}
- 链表反向输出(不是反转)
void R_print(LinKList L){ if(L->next!=NULL) R_print(L->next); printf(L->data);}
- 删除带头结点的单链表L中最小值
//p扫描单链表,pre指向*p节点的前驱,minp保存最小节点指针(初值是p),minpre是指向minp的前驱(初值是pre)//若p->data小于minp-》data,则将p,pre,分布赋予minp和minpreLinkList Del_Min(LinkList &L){ LNode *pre=L,*p=pre->next; LNode *minpre=pre, *min=p; while(p!=NULL) { if(p->data<minp->data) { minp=p; minpre=pre; } pre=p; p=p->next; } minpre->next=minp->next; //删除最小值 free(minp); return L;}
- 链表反转
//将头结点摘下,然后从第一节点开始,一次前插入到头结点后面LinkList R_1(LinkList &L){ p=L->next; L->next=NULL; while(p!=NULL) { r=p->next; p->next=L->next; L->next=p; p=r; } return L;}//pre,p,rLinkList R_2(LinkList &L){ LinkList *pre,*p=L->next;*r=p->next; p->next=NULL; //处理第一个节点 while(r!=NULL) { pre=p; p=r; r=r->next; p->next=pre; } L->next=p; return L;}
- 链表增序
void Sort(LinkList &L){ LNode *p=L->next;*pre; Lnode *r=p->next; p->next=NULL; p=r; while(p!=NULL) { r=p->next; pre=L; while(pre->next!=NULL && pre->next->data<p->data) pre=pre->next; p->next=pre->next; pre->next=p; p=r; }}
- 寻找两个单链表的公共节点
//计算长度差,在长单链表上先遍历长度长度之差,,在遍历两个链表LinkList Search_List_Common(LinkList L1,LinkList L2){ int len1=Length(L1),len2=Length(L2); LiNKList longlist,shortlist; if(len1>len2) { longlist=L1->next; shortlist=L2->next; dist=len1-len2 } else { longlist=L2->next; shortlist=L1->next; dist=len2-len1; } while(dist--) longlist=longlist->next; while(longlist!=NULL) { if(longlist=shortlist) return longlist; else { longlist=longlist->next; shortlist=shortlist->next; } } return NULL;}
- 两个有序表,依次增序,合并成一个递减序列
//头插法void MergeList(LinkList &La,LinkList &Lb){ LNode *r,*pa=La->next,*pb=Lb->next; La->next=NULL; while(pa&&pb) { if(pa->data<=pb->data) { r=pa->next; pa->next=La->next; La->next=pa; pa=r; } else { r=pa->next; pb->next=La->next; La->next=pn; pb=r; } } if(pa) pa=pb; while(pb) { r=pb->next; pb->next=La->next; La->next=pb; pb=r; } free(Lb);}
- 判断是否是自序列
int Pattern(LinkList A,LinkList B){ LNode *p=A; LNode *pre=p; LNode *q=B; while(p&&q) if(p->data==q->data) { p=p->next; q=q->next; } else { pre=pre->next; p=pre; q=B; } if(q==NULL) return 1; else return 0;}
0 0
- 数据结构_2:链表:C语言练习
- 数据结构_2:链表:C语言
- c语言数据结构的练习
- C语言_2
- C语言心得_2
- C语言基础_2
- 数据结构_2:链表:C++
- 数据结构_2:链表:STL
- 【C语言】树_数据结构_练习
- 【C语言】图_数据结构_练习
- 【C语言】查找_数据结构_练习
- 重学c语言_2
- [c++,小练习] 日常小程序_2
- C语言数据结构----链表
- 我的C语言矩阵库_2
- 数据结构与算法C语言描述 第三章练习
- 链表(C语言数据结构)
- 复习(数据结构):链表:c语言
- 不是回归的回归——Logistic Regression
- windows下面把输出到屏幕的printf输入到文件里面
- 在软件设计中画UML图时,类之间常见的关系
- Bilateral Filter:保护边缘的平滑滤波器
- Android 媒体 V-音频捕捉
- 数据结构_2:链表:C语言练习
- 二维数组和二维指针
- Pasha and Stick
- 关于有偿提供拼图响应式后台的通知
- 【基础建模】二维转三维学习笔记
- Hibernate实现增删查改CURD例子
- 成员变量内存分析
- 使用Python 批量转移*.tif和*.mov文件
- 输出n*n阶方阵