欢迎来到天天文库
浏览记录
ID:39557053
大小:92.50 KB
页数:8页
时间:2019-07-06
《带头结点的单链表的创建》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、带头结点的单链表的创建、求表长、输出、插入、删除、查找、逆置//说明在VC6.0中不能把本代码保存为.c进行编译,应保存为.cpp,原因可能是里边注释是c++的风格,在codeblocks中不存在这个问题#include#include#defineDataTypeint#defineFLAG-1typedefstructNode{ DataTypedata; structNode*next;}Lnode,*LinkList;LinkListCreat_Lin
2、kList(){ LinkListL; Lnode*s,*r; intx; printf("建立有表头结点的单链表,以%d作为创建链表完成的标志",FLAG); L=r=s=NULL; L=(Lnode*)malloc(sizeof(Lnode)); if(!L) { printf("表头结点开辟失败"); exit(-1); } L->next=NULL; scanf("%d",&x); while(x!=FLAG) {
3、 s=(Lnode*)malloc(sizeof(Lnode)); if(!s) { printf("结点开辟失败"); exit(-1); } s->data=x; if(NULL==L->next)//第一个结点的处理 L->next=s; else r->next=s; r=s; scanf("%d",&x); } i
4、f(r!=NULL)//对于非空表,最后结点的指针域放空指针 r->next=NULL; returnL;}/*有头结点的链表,求表长算法*/intLength_LinkList(LinkListL){Lnode*p; intj; p=L; j=0; while(p->next) { p=p->next; j++; } returnj;}intPrint_LinkList(LinkListL){ printf("输出:"); Lnod
5、e*s; s=L; while(s->next!=NULL) { s=s->next; printf("%3d",s->data); } printf(""); return0;}/*逆置算法思路:依次取原链表中每个结点,将其作为第一个结点插入到新的链表中去。指针p用来指向原表中当前结点,p为空时结束。*/voidReverse_LinkList(LinkListH)//单链表的逆置{ Lnode*p,*q; p=H->next;//p指向第一个
6、结点 H->next=NULL;//将原链表置为空表 while(p) { q=p; p=p->next; q->next=H->next;//将当前节点插入到头结点后面 H->next=q; } return;}/*按序号查找*/Lnode*Get_LinkList(LinkListL,inti){ Lnode*p; intj=0; p=L; while(p->next!=NULL&&j
7、->next; j++; } if(j==i) returnp; else returnNULL;}/*按值查找*/Lnode*Locate_LinkList(LinkListL,DataTypex){ Lnode*p; p=L->next; while(p!=NULL&&p->data!=x) p=p->next; returnp;}/*插入操作,分为:前插接点、后插结点.下面的算法实现在链表的第i个位置上插入一个数值后插结点:设p指向单链表中某结点,
8、s指向待插入值为x的新结点,将*s插入到*p之后,操作:s->next=p->next;p->next=s;前插接点:遇红茶结点不同德是,这种算法要先找到前驱结点*q,然后完成在*q后插入*s,操作:q=L;while(q->next!=p)q=p->next;s->next=q->next;q->next=s;*/intInsert_LinkList(LinkListL,inti,DataTypex){ Lnode*p,
此文档下载收益归作者所有