线性表PPT.
- 格式:pptx
- 大小:796.91 KB
- 文档页数:87


线性表实验报告
一、 实验的目的要求
1、了解线性表的逻辑结构特性,以及这种结构特性在计算机内的两种存储结构。
2、掌握线性表的顺序存储结构的定义及其C语言实现。
3、掌握线性表的链式存储结构——单链表的定义及其C语言实现。
4、掌握线性表在顺序存储结构即顺序表中的各种基本操作。
5、掌握线性表在链式存储结构——单链表中的各种基本操作。
6、认真阅读和掌握实验的程序。
7、上机运行本程序。
8、保存和打印出程序的运行结果,并结合程序进行分析。
二、 实验的主要内容
题目: 请编制C语言,利用链式存储方式来实现线性表的创建、插入、删除和查找等操作。
具体地说,就是要根据键盘输入的数据建立一个单链表,并输出该单链表;然后根据屏幕
菜单的选择,可以进行数据的插入或删除,并在插入或删除数据后,再输出单链表;最后
在屏幕菜单中选择0,即可结束程序的运行。
三、 解题思路分析
在链表中插入数据,不需要进行大量的数据移动,只需要找到插入点即可,可以采用后插入的算法,在插入点的后面添加结点。在链表中删除数据,先找到删除点,然后进行指针赋值操作。
四、程序清单
#include
#include
#include
typedef int ElemType;
typedef struct LNode
{ElemType data;
struct LNode *next;
}LNode; LNode *L;
LNode *creat_L();
void out_L(LNode *L);
void insert_L(LNode *L,int i,ElemType e);
ElemType delete_L(LNode *L,ElemType e);
int locat_L(LNode *L,ElemType e);
void main()
{int i,k,loc;
线性表习题
一、填空
1、具有表头指针的循环单链表first为空的条件是( )。
2、在不带表头结点的线性表first中删除表的第一个结点时,实现的语句是( )。
3、线性表是由n(n>=0)个( )组成的有限序列。
4、若设L是带表头结点的单链表,则语句L.link=L.link.link的作用是( )。
5、在单链表中,除了表头结点外,任意结点的存储位置由其( )的链指针域的值指示。
6、链表是一种采用( )存储结构存储的线性表。
7、单链表中逻辑上相邻的元素的物理位置( )相邻。
8、在双向链表中,每个结点除了数据域外,有两个指针域,它们分别指向( )。
9、线性表按链接方式存储时,每个结点的存储包括( )两部分。
二、判断正误(在正确的说法后面打勾,反之打叉)
( )1. 链表的每个结点中都恰好包含一个指针。
( )2. 链表的物理存储结构具有同链表一样的顺序。
( )3. 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。
( )4. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
( )5. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
( )6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
( )7. 线性表在物理存储空间中也一定是连续的。
( )8. 线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。
( )9. 顺序存储方式只能用于存储线性结构。
( )10. 线性表的逻辑顺序与存储顺序总是一致的。
甘肃政法学院
本科生实验报告
(一)
姓名:马大哈
学院:计算机科学学院
专业:计算机科学与技术
班级:2011级计算机科学与技术本科班
实验课程名称:数据结构
实验日期: 2012年 9月 13 日
指导教师及职称:陆军老师
实验成绩:
开课时间:2012-2013学年第一学期
甘肃政法学院实验管理中心印制
实验题目 线性表的归并 小组合作 无
姓名 马大哈 班级 2011级计本 学 号 201181110100
一、实验目的
利用两个线性表LA和LB分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的集合A=AUB。这就要求对线性表作如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。只要从线性表LB中依次取得每个数据元素,并依值在线性表LA中进行查访,若不存在,则插入之。
二.实验环境
Microsoft Visual C++ 6.0
三、实验内容与步骤
#include"c1.h"
typedef int ElemType;
#include"c2-1.h" /* 采用线性表的动态分配顺序存储结构 */
#include"bo2-1.c" /* 可以使用bo2-1.c中的基本操作 */
Status equal(ElemType c1,ElemType c2)
{ /* 判断是否相等的函数,Union()用到 */
if(c1==c2)
return TRUE;
else
return FALSE;
}
void Union(SqList *La,SqList Lb) /* 算法2.1 */
{ /* 将所有在线性表Lb中但不在La中的数据元素插入到La中 */
ElemType e;
int La_len,Lb_len;
int i;
线性表
线性表结构特点:在数据元素的非空有限集中,(1)存在唯一的一个被称作“第一个”的数据元素;(2)存在唯一的一个被称作“最后一个”的数据元素;(3)除第一个外,集合中的每个元素均只有一个前驱;(4)除最后一个外,集合中的每个元素均只有一个后继。
每个一个数据元素的具体含义,在不同情况下各不相同,可以是数,符号,一页书或者更复杂的信息。
线性表是一个相当灵活的数据结构,长度可根据需要增长或缩短,即可访问,插入和删除。
* ** 线性表的链式存储结构特点是用一组任意的存储单元存储线性表的数据元素。为了表示Ai与Ai+1的逻辑关系,对Ai来说,除了存储自身信息外,还需存储一个指示其直接后继的信息,我把这两部分信息称为节点。(数据域 + 指针域)
栈和队列是线性结构,其特殊性在于栈和队列的基本操作是线性表操作的子集,他们是操作受限的线性表。
栈:
仅限在表尾进行插入或删除的线性表(后进先出),因此,表尾端有特殊含义,称为栈顶,表头端称为栈底,不含元素的空表称为空栈。
队列:
和栈相反,队列是(先进先出)的线性表。只允许在表的一端进行插入,而在另一端删除元素,就像排队。允许插入的一端叫队尾,允许删除一端叫对头。
串:
串是零个或多个字符组成的有限序列。
串中字符的数目称为串的长度,零个字符的串称为空串,其长度为0。串中任意个连续的字符组成的子序列称为该串的子串。
数组和广义表: