《线性表链式存储结构上得基本操作.doc》由会员分享,可在线阅读,更多相关《线性表链式存储结构上得基本操作.doc(4页珍藏版)》请在金锄头文库上搜索。
1、一、 单链表的存储结构typedef struct node Elemtype data; struct node *next; lnode, *linklist;结点类型 指针类型二、 基本操作的算法实现:1. 单链表的建立:(1) 带头结点的尾插法: void creatlistr( linklist *l) l=(lnode *)malloc(sizeof(lnode); r=l; cycle=1; while(cycle) scanf(&x); if(x!=0) s=(lnode *)malloc(sizeof(lnode); s-data=x; r-next=s; r=s; else
2、 cycle=0; r-next=Null;(2) 带头结点的头插法:void creatlistl( linklist *l,int n) l=(lnode *)malloc(sizeof(lnode); l-next=Null; for(i=n;i0;-i) p=(lnode *)malloc(sizeof(lnode); scanf(&p-data); p-next=l-next; l-next=p; 2. 取元素Status getelem( linklist *l, int i, Elemtype *e) p=l-next; j=1; while(p&jnext; +j; if(!p
3、|ji) return 0; e=p-data; return e;3. 插入操作Status insert( linklist *l, int i, Elemtype e) p=l; j=0;while(p&jnext; +j;if(!p|ji-1) return 0; s=(lnode *)malloc(sizeof(lnode); s-data=e; s-next=p-next; p-next=s;4. 删除操作Status delete(linklist *l, int i, Elemtype *e) p=l; j=0;while(p-next&jnext; +j;if(!(p-nex
4、t)|ji-1) return 0; q=p-next; p-next=q-next; e=q-data; delete q; return e; 实例:如何将两个有序链表合并为一个有序链表 算法: void mergelist( linklist *la, linklist *lb, linklist *lc) pa=la-next; pb=lb-next; pc=lc=la; while(pa&pb) if(pa-datadata) pc-next=pa; pc=pa; pa=pa-next; else pc-next=pb; pc=pb; pb=pb-next; pc-next=pa?pa:pb; delete lb;