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

数据结构专升本第二周.doc

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

2.3 线性表的链式存储结构 一、单链表的基本概念 1、链表(Linked List):用链接存储方式存储的线性表。 一个链表结点由两个域构成:①存储数据元素信息的域称为数据域;   ②存储直接后继存储位置的域称为指针域。   指针域中存储的信息称为指针(pointer)或链(link)。 若链表中每个结点只包含一个指针域,则称此链表为 (Single Linked。指向结点的指针被称为头指针(head)。  链表的最后一个结点被称为尾结点(rear),}ListNode; typedef ListNode *LinkList; 建立 头插法建立单链表 LinkList CreateListF(void) { char ch; LinkList head; /*头指针*/ ListNode *s; /*工作指针*/ head=NULL; /*链表开始为空*/ ch=getchar(); while (ch!=\n) { s=(ListNode *)malloc(sizeof(ListNode)); /*生成新结点*/ s-data=ch; s-next=head; head=s; ch=getchar(); } return head; /*返回头指针*/ } 尾插法建立单链表 LinkList CreateListR(void) { char ch; LinkList head; /*头指针*/ ListNode *s,*r; /*工作指针*/ head=NULL; /*链表开始为空*/ r=NULL; /*链表尾指针开始为空*/ while ((ch=getchar())!=\n) { s=(ListNode *)malloc(sizeof(ListNode)); /*生成新结点*/ s-data=ch; if (head==NULL) head=s; /*新结点插入空表*/ else r-next=s; r=s; } if (r!=NULL) r-next=NULL; /*对于非空表,将尾结点指针域置空*/ return head; /*返回头指针*/ } 在链表开始之前附加一个头结点的优点: 由于开始结点的位置被存放在头结点的指针域中,所以链表的第一个位置上的操作和在表的其他位置上的操作一致,无须进行特殊处理; 无论链表是否为空,其头指针是指向头结点的非空指针,因此空表和非空表处理一致。 LinkList CreateListR1(void) { char ch; LinkList head=(ListNode *)malloc(sizeof(ListNode)); ListNode *s,*r; r=head; /*尾指针初值指向头结点*/ while ((ch=getchar())!=\n) { s=(ListNode *)malloc(sizeof(ListNode)); /*生成新结点*/ s-data=ch; r-next=s; r=s; } r-next=NULL; return head; /*返回头指针*/ } 以上三个算法的时间复杂度均为O(n) 2、查找 LinkList GetNode(LinkList head,int i) {/*在带头结点的单链表head中查找第i个结点*/ int j; ListNode *p; p=head;j=0; /*从头结点开始扫描*/ while (p-next ji) /*顺指针向后扫描,直到链表尾或找到为止*/ { p=p-next; j++; } if (i==j) return p; /*找到了第i个结点*/ else return NULL; /*找不到满足条件的结点*/ } LinkList LocateNode(LinkList head,DataType key) {/*在带头结点的单链表head中查找其值为key的结点*/ ListNode *p=head-next; /*从开始结点比较*/ while (pp-data!=key) /*直到p为NULL或p-data是key为止*/ p=p-next; /*扫描下一结点*/ return p; } 以上两个算法的时间复杂度均为O(n) 3、插入 void InsertList(LinkList head,DataType x,int i) {/*将值为x的新结点插入到带头结点的单链表head的第i个结点的位置上*/ ListNode *p,*s; p=

文档评论(0)

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

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

1亿VIP精品文档

相关文档