线性表链式存储结构上得基本操作.docVIP

  • 1
  • 0
  • 约1.54千字
  • 约 4页
  • 2017-08-20 发布于北京
  • 举报
单链表的存储结构 typedef struct node{ Elemtype data; struct node *next; }lnode, *linklist; 结点类型 指针类型 基本操作的算法实现: 单链表的建立: 带头结点的尾插法: 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 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;} } 取元素 Status getelem( linklist *l, int i, Elemtype *e){ p=l-next; j=1; while(pji){ p=p-next; ++j;} if(!p||ji) return 0; e=p-data; return e;} 插入操作 Status insert( linklist *l, int i, Elemtype e){ p=l; j=0; while(pji-1) {p=p-next; ++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-nextji-1){ p=p-next; ++j;} if(!(p-next)||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(papb){ if(pa-data=pb-data){ pc-next=pa; pc=pa; pa=pa-next;} else { pc-next=pb; pc=pb; pb=pb-next;} pc-next=pa?pa:pb; delete lb; }

文档评论(0)

1亿VIP精品文档

相关文档