网站大量收购独家精品文档,联系QQ:2885784924

[工学]数据结构 第二讲 线性表更新.ppt

  1. 1、本文档共84页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]数据结构 第二讲 线性表更新

福州大学至诚学院 typedef struct Lnode{ ElemType data; Struct Lnode *next; } Lnode, *Link ; typedef struct { Link last ; int len ; } LinkList ; 福州大学至诚学院 链表初始化: Status InitList( LinkList L) { link head = (link)malloc(sizeof(Lnode)) ; if ( head == NULL ) return ERROR ; head-next = head ; L-last = head ; L-len = 0 ; return OK ; } 福州大学至诚学院 访问操作:访问链表中位置i处的元素 Status GetElem_L( LinkList L, int i, ElemType e ) { link p ; int j ; if( i1 || iL-n ) return ERROR ; // L-last-next 指向头结点 p = L-last-next-next ; for(j=1;ji;j++) p = p-next ; e = p-data ; } 福州大学至诚学院 int LocateElem( LinkList L , ElemType e , int (*compare) (ElemType,ElemType ) ) { int i = 1 ; link p ; //空表时指向头结点,非空表时指向第一个表元素结点 p = L-last-next-next ; //将x赋给头结点的值域,作用是设置哨兵结点, //无需在while的条件表达式中判断p是否等于L-last-next L-last-next-data = e ; while(compare(p-data,e)==0){p=p-next ; i++;} return ( p == L-last-next ) ? 0:i; } typedef int (* compare) (ElemType , ElemType ) ; 福州大学至诚学院 插入操作 void ListInsert(LinkList L, int i, ElemType e ) { link p , y ; int j ; if(i1||iL-len+1) return ERROR ; p = L-last-next-next ; for(j=1;ji-1;j++) p = p-next ; s = (Link)malloc(sizeof(Lnode)); s-data=e;s-next=p-next;p-next = s ; //如果是在表尾插入,需要修改尾指针 if(i==L-len+1) L-last = s ; L-n++; } 福州大学至诚学院 删除操作 ListItem ListDelete(LinkList L, int i, ElemType e ) { link p , q ; int j ; // 排除空表的情况 if(i1||iL-len) return ERROR ; q = L-last-next-next; for(j=1;ji-1;j++) q = q-next ; p = q-next ; q-next = p-next ; if( i == L-len ) L-last = q ; e = p-data ; free(p) ; L-len--; } 福州大学至诚学院 示例-约瑟夫环问题 问题描述:有N个人围成一个环,给定一个整数M≤N, 从第一个人开始报数,沿环报数, 报到M的人退出环,且计数继续进行下去直到所有人都退出环为止,要求输出离开环的顺序 如(7,3): 约瑟夫环序列为:3,6,2,7,5,1,4 福州大学至诚学院 实现 Void Joseph (LinkList L){ i = 1 ; j = 0 ; while( ! ListEmpty( L ) ) { GetElem_L( L , i , e ) ; j++ ; if ( j == M ) { DeleteElem( L , i, e ) ; j=0; } else i++ ; } } 福州大学至诚学院 双向链表 双向链表的特点 ---- 表中的每个结点有两个指针域,一个指向后继结点,一个指向前趋结点, 整个链表形成两个环。 从表的任意结点出发可以通过正向环(或反

文档评论(0)

ipbohn97 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档