第二章线性表讲义.docVIP

  • 2
  • 0
  • 约 11页
  • 2016-08-30 发布于重庆
  • 举报
第二章线性表讲义

线性表的链式存储 顺序表的逻辑结构与存储结构一致,线性链表的的逻辑结构与存储结构不一致 对线性链表可以方便地进行插入数据和删除数据的操作,关键是要找到适当的位置。 2.3.1 单链表的基本概念 以链式结构存储的线性表称为链表。 结点: 一个结点存储一个数据元素; 例: typedef struct Lnode { long nub; struct Lnode *next; } linklist; linklist *L, n1; n1.data n1.next L n1 L= n1 例: 单链表示意图 线性表=(“王”,“李”,“钱”,“孙”,“吴”,“张”) 1 李 40 7 张 NULL 20 王 1 40 钱 54 54 孙 83 83 吴 7 2.3.2 单链表的基本操作 1、 置空表 上例 L-next =NULL; (0) 2、 插入数据 ( 头插法、后插法、指定位置) 3、 定位(按值查找) 4、 删除结点 5、 求表长 6、 除链表的内容 2、插入数据 尾插法:在链表最后一个结点之后插入一个新的数据结点;可以用来建立链表; typedef struct Lnode { Long data; struct Lnode *next; } linklist; linklist *L; L=NULL; main( ) { Long temp; 取数据 temp 当(temp≠ 结束标志){ Ins(linklist *L, Long temp) 取数据 temp } } void Ins(linklist *L, Long temp) { linklist *pnode, *p,*q; pnode=( linklist *)malloc(sizeof(linklist)); if( pnode==NULL) return 0; pnode-data= temp; pnode-next= NULL; if(L== NULL ){ // 第一个结点 L= pnode; return; } p= L; // 找链尾 while ( p-next!=NULL ) p = p-next; p-next = pnode; } 在给定的结点之后插入一个新的数据结点 typedef struct Lnode { Long data; struct Lnode *next; } linklist; linklist *L; int Ins(linklist *L, int i, Long x ) { int j=1;① if( pnode==NULL) return 0; pnode-data= x ; ② temp=L-next; ③ if( temp == NULL){ if( i==1 ){ /* 插入第一个数据结点 */ L-next= pnode; ④ pnode-next= NULL; ⑤ retuen 1; }else retuen 0; } while ((j i-1)temp!=NULL ){ //找位置 temp = temp-next; j++; } if(temp ==NULL ) return F; pnode-next= temp-next; temp-next= pnode; return T; } 定位(按值查找) int Loc(linklist *L, Long x) { int i=1; 4、删除结点 ---删除第i个结点 (以图示分析) int Del(linklist *L, int i ) { linklist *temp, *q, int j=1; temp=L-next; if( temp == NULL) retuen 0; while ((j i-1)temp!=NULL ){ j++; temp = temp-next; } if(

文档评论(0)

1亿VIP精品文档

相关文档