资源描述:
《数据结构与算法单链表的实现.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、单链表的实现实现单链表的基本操作,必须包括初始化链表(元素为空)、销毁链表、求表长、查找、插入、删除、遍历(打印)等操作。请编写程序,实现上述单链表的基本操作。注意:1.元素类型可以自定义2.可以是带头结点的单链表或不带头结点的单链表#include#include#includetypedefintdatatype;typedefstructnode{datatypedata;structnode*next;}LNode,*LinkList;/*//创建不
2、带头结点的单链表LinklistCreate_LinkList(){returnNULL;}*///创建带头结点的单链表LinkListCreate_LinkList(){LinkListL=NULL;L=(LinkList)malloc(sizeof(LNode));if(L)L->next=NULL;returnL;}//打印单链表voidPrint_LinkList(LinkListH){if(H==NULL){printf("?????????");}else{printf("head-->");Lin
3、kListp=H->next;while(p!=NULL){printf("%d",p->data);printf("-->");p=p->next;}printf("");}}//销毁单链表voidDestroy_LinkList(LinkList*H){LinkListp,q;p=*H;while(p){q=p;p=p->next;free(q);}*H=NULL;if(*H==NULL)printf("销毁成功,请退出");elseprintf("销毁失败");}//求表长intLength_Li
4、nkList(LinkListL){LNode*p=L;intj=0;while(p->next){p=p->next;j++;}returnj;}//表长功能实现voidlength(LinkListL){inti=0;i=Length_LinkList(L);printf("表长:%d",i);}//查找操作//1)按序号查找LNode*Get_LinkList1(LinkListL,inti){LNode*p=L;intj=0;while(p->next!=NULL&&jnext;j++
5、;}if(j==i)returnp;elsereturnNULL;}//2)按值查找即定位intLocate_LinkList2(LinkListL,datatypex){LNode*p=L;inti=0;while(p->data!=x){p=p->next;i++;}returni;}//查找功能实现voidfind(LinkListL){inti,n;LNode*p,*s;datatypex;printf("选择下列功能");printf("t1)按序号查找");printf("t2)按值查找即定
6、位");scanf("%d",&i);switch(i){case1:printf("请输入第几个元素:");scanf("%d",&n);p=Get_LinkList1(L,n);if(p==NULL)printf("查找失败");elseprintf("您所查找的元素为:%d",p->data);break;case2:printf("请输入元素值:");scanf("%d",&x);i=Locate_LinkList2(L,x);if(i!=0)printf("第%d个元素",i);elsep
7、rintf("查找失败");break;}}//插入intInsert_LinkList(LinkListL,inti,datatypex){LNode*p,*s;p=Get_LinkList1(L,i-1);if(p==NULL){printf("参数i错");return0;}else{s=(LNode*)malloc(sizeof(LNode));s->data=x;s->next=p->next;p->next=s;}return1;}//插入功能实现voidInsert(LinkListL){LN
8、ode*p=L;datatypex;inti,a=1;printf("请输入要插入的数:");scanf("%d",&x);printf("请输入要插入的位置:");scanf("%d",&i);a=Insert_LinkList(L,i,x);if(a==1)printf("插入成功");elseprintf("插入失败");}//删除intDel