华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第二章 线性表(2/2)2.3 线性表的链式存储结构

数据结构华中科技大学计算机学院(3) 2001-3-12
数据结构 华中科技大学计算机学院(3) ------------------------------------------------ 2001-3-12

2.3线性表的链式存储结构 2.3.1单链表 1单链表的结点结构 data next 前驱a(-) 一后继a(+1 结点类型说明 例1C语言的“结构”类型 struct node I ElemType data //data为抽象元素类型 struct node米next;//next为指针类型 指向结点的指针变量head,p,q说明: struct node *head, *p, *q
2.3 线性表的链式存储结构 2.3.1单链表 1 单链表的结点结构: data next 前驱a(i-1) ─→ ai ─→后继a(i+1) 结点类型说明 例1 C语言的“结构”类型: struct node { ElemType data; //data为抽象元素类型 struct node *next; //next为指针类型 }; 指向结点的指针变量head,p,q说明: struct node *head,*p,*q;

例2用 typedef定义指针类型 typedef struct lnode i Elem Type data //data为抽象元素类型 struct node米next;//next为指针类型 1 *Linklist 指针变量head,p,q的说明 Linklist head, p, g; 2.单链表的一般形式: (1)不带表头结点的单链表: data next head a2 an∧ 头指针 首结点 尾结点 其中:data称为数据域,next称为指针域/链域 当head=NUL,为空表;否则为非空表
例2 用typedef定义指针类型: typedef struct Lnode { ElemType data; //data为抽象元素类型 struct node *next; //next为指针类型 } *Linklist; 指针变量head,p,q的说明: Linklist head,p,q; 2.单链表的一般形式: (1)不带表头结点的单链表: data next head ---→ a1 ---→ a2 --→ ...--→ an ∧ 头指针 首结点 尾结点 其中:data称为数据域,next称为指针域/链域 当 head==NULL,为空表;否则为非空表

(2)带表头结点的单链表: a.非空表 data next head--→// al an ∧ 头指针表头结点首结点 尾结点 b.空表: data next head //∧ 头指针表头结点 其中:head指向表头结点, head->data不放元素, head->next指向首结点a1, 当head>next=NULL,为空表;否则为非空表
(2)带表头结点的单链表: a.非空表: data next head ---→ /// --→ a1 --→...--→ an ∧ 头指针 表头结点 首结点 尾结点 b.空表: data next head ---→ /// ∧ 头指针 表头结点 其中:head指向表头结点, head->data不放元素, head->next指向首结点a1, 当head->next==NULL,为空表;否则为非空表

3.单链表操作和算法举例: (1)生成单链表 例1输入一列整数,以0为结束标志,生成“先进先出”单链 表。 若输入:2,8,5,0,则生成: tail head #define null o /定义符号常量NUL # define leng sizeof( struct lnode)//结点所占的单元数 struct lnode //定义结点类型 i int data //data为整型 struct node next //next为指针类型
3.单链表操作和算法举例: (1) 生成单链表。 例1 输入一列整数,以0为结束标志,生成“先进先出”单链 表。 若输入:2,8,5,0,则生成: tail ↓ head -→ /// --→ 2 --→ 8 --→ 5 --→ 0 ∧ #define NULL 0 //定义符号常量NULL #define LENG sizeof(struct Lnode) //结点所占的单元数 struct Lnode //定义结点类型 { int data; //data为整型 struct node *next; //next为指针类型 };

初始化: headl输入2:ha-bm12 、③ ail tail 输入8:hed-Dm2 tail 每次输入新元素后: 生成新结点;p= malloc((结点大小);p->data=e;p→next=NULL; ②添加到表尾;tail-> next=p 设置新表尾。tail-p;
初始化:head //// ^ 输入2: head //// tail tail 2 ^ p ① ③ ② 每次输入新元素后: • 生成新结点;p=malloc(结点大小); p->data=e; p->next=NULL; ② 添加到表尾;tail->next=p; ③ 设置新表尾。tail=p; head //// tail 8 ^ ① ③ ② 输入8: 2 p

先进先出表的产生过程(1,2,3,40) head 4 0 头指针头结点、 head=malloc(sizeof(struct node)) p=malloc(sizeof(struct node)) tail=head tail->next=p =malloc(sizeof(struct node)) tail=p tail->next=p ail-p tail->next=NULL:
先进先出表的产生过程(1,2,3,4,0): head p /// 1 2 3 4 0 p p p p 头指针 头结点 tail head=malloc(sizeof(struct node)) tail=head tail p=malloc(sizeof(struct node)) tail->next=p tail=p p=malloc(sizeof(struct node)) tail tail->next=p tail=p tail tail tail tail->next=NULL; ^

算法:生成“先进先出”单链表(链式队列) struct Lnode *creatI() struct lnode*head,*tail,*p;//变量说明 int e: head=( struct lnode*) malloc(LENG);//生成表头结点 tail=head: //尾指针指向表头 do{p=( struct lnode米) malloc(LENG);//生成新结点 scanf(%d,&e);/输入一个数 p->data=e //装入输入的元素e tail->next=p //新结点链接到表尾 all-p; //尾指针指向新结点 while(e!=0) //不为0 tail->next=NULL //尾结点的next置为空指针 return head //返回头指针
算法:生成“先进先出”单链表(链式队列) struct Lnode *creat1( ) { struct Lnode *head,*tail,*p; //变量说明 int e; head=(struct Lnode *)malloc(LENG); //生成表头结点 tail=head; //尾指针指向表头 do{ p=(struct Lnode *)malloc(LENG);//生成新结点 scanf(“%d”,&e); //输入一个数 p->data=e; //装入输入的元素e tail->next=p; //新结点链接到表尾 tail=p; //尾指针指向新结点 } while (e!=0); //不为0 tail->next=NULL; //尾结点的next置为空指针 return head; //返回头指针 }

例2生成“后进先出”单链表(链式栈)。输入:2,8,5,0,生成: head 0 5 8 2∧ 算法: struct Lnode *creat() //生成“后进先出”单链表 I struct Lnode *head, *p head=( struct lnode*) malloc(LENG);/生成表头结点 head->next=NULL //置为空表 do {p=( struct lnode*) malloc(LENG);//生成新结点 scanf(%d3,&(p>data);//输入数,送新结点的data p->next=head->next //新结点插入表头结点之后 head->next=p //尾指针指向新结点 } while(p>data!=0);//不为0 return head //返回头指针
例2 生成“后进先出”单链表(链式栈)。输入:2,8,5,0,生成: head --→ /// --→ 0 --→ 5 --→ 8 --→ 2 ∧ 算法: struct Lnode *creat2( ) //生成“后进先出”单链表 { struct Lnode *head,*p; head=(struct Lnode *)malloc(LENG);//生成表头结点 head->next=NULL; //置为空表 do { p=(struct Lnode *)malloc(LENG);//生成新结点 scanf(“%d”,&(p->data));//输入数,送新结点的data p->next=head->next; //新结点插入表头结点之后 head->next=p; //尾指针指向新结点 } while (p->data!=0); //不为0 return head; //返回头指针 }

初始化: headm输入2: headw2 输入8:head-m 每次输入新元素后: 生成新结点; p=mall(结点大小);p->data=e; ②新结点指针指向首元素;p->next-head->next 新结点作为首元素:head->next=p
初始化:head //// ^ 输入2: head //// 2 ^ p ① ② 每次输入新元素后: • 生成新结点; p=malloc(结点大小); p->data=e; ② 新结点指针指向首元素;p->next=head->next; ③ 新结点作为首元素: head->next=p; head //// 2 ^ ① ② 8 输入8: p ③ ③
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第二章 线性表(1/2)2.1 线性表的定义 2.2 线性表的顺序表示.ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第一章 绪论.ppt
- 华中科技大学:《C语言程序设计》作业解答4.ppt
- 华中科技大学:《C语言程序设计》作业解答3.ppt
- 华中科技大学:《C语言程序设计》作业4.doc
- 华中科技大学:《C语言程序设计》作业3.doc
- 华中科技大学:《C语言程序设计》作业2.doc
- 华中科技大学:《C语言程序设计》上机作业2.doc
- 华中科技大学:《C语言程序设计》上机作业1.doc
- 华中科技大学:《C语言程序设计》第7章 图.doc
- 华中科技大学:《C语言程序设计》数据结构算法C程序.doc
- 华中科技大学:《C语言程序设计》数据结构算法C程序1.doc
- 华中科技大学:《C语言程序设计》数据结构算法C程序.doc
- 华中科技大学:《C语言程序设计》演示文稿练习题1.ppt
- 华中科技大学:《C语言程序设计》作业9.doc
- 华中科技大学:《C语言程序设计》作业7.doc
- 华中科技大学:《C语言程序设计》作业6.doc
- 华中科技大学:《C语言程序设计》作业5.doc
- 华中科技大学:《C语言程序设计》作业4.doc
- 华中科技大学:《C语言程序设计》作业3.doc
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第三章 栈和队列 3.1 栈(stack)3.2 栈的应用举例.ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第三章 栈和队列 3.4 队列(排队,queue).ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第四章 字符串/串(string).ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第五章 数组和广义表.ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)作业解答3.ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)作业解答4.ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)作业解答5.ppt
- 华中科技大学:《C语言程序设计》作业解答-图.ppt
- 华中科技大学:《C语言程序设计》作业解答-树.ppt
- 华中科技大学:《C语言程序设计》大型作业.ppt
- 华中科技大学:《C语言程序设计》第十章 内排序.ppt
- 华中科技大学:《C语言程序设计》第十章(10-4) 归并排序.ppt
- 华中科技大学:《C语言程序设计》第十二章 文件.ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第六章 树和二叉树 6.1 树的定义 6.2 二叉树(binary tree)6.3 遍历二叉树和线索二叉树.ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第六章 树和二叉树 6.3 遍历二叉树和线索二叉树.ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第七章 图 Graph 7.1 图的定义和术语 7.2 图的存储结构.ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第七章 图 Graph 7.3 图的遍历 7.4 图的连通性问题.ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第七章 图 Graph 7.5 有向无环图及其应用 7.6 最短路径.ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第九章 查找表 9.0 有关的术语 9.1 静态查找表 9.2 动态查找表.ppt
- 华中科技大学:《数据结构》课程教学资源(PPT课件讲稿)第九章 查找表 9.3 哈希(Hash)表和哈希法.ppt