实验二 线性表的基本操作
更新时间:2023-10-01 23:28:01 阅读量: 综合文库 文档下载
- 实验二小推荐度:
- 相关推荐
实验二 线性表的基本操作
一、实验目的
1. 掌握使用VC++6.0上机调试线性表的基本方法;
2. 掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构上的运算。
3. 掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在链式存储结构上的运算。
二、实验要求
1. 认真阅读和掌握本实验的程序。 2. 补全程序上机调试。
3. 保存程序的运行结果和程序清单,并结合程序进行分析
三、实验内容
1. 顺序表基本操作的实现:包括顺序表的创建、插入、删除和查找,请补全程序并调试。 第1步:任务分析
完成顺序表的建立,插入,删除和查找等函数功能,有助于更好的理解顺序表的概念和使用规律。上述函数都是线性表的基本操作,根据这些基本操作,可以构成其他更复杂的操作。
第2步:程序构思
(1) 顺序表的创建:因为顺序表的结构中包括了存放数据元素的起始地址,表的容量,以及表的当前长度等部分,所以表的创建工作一方面要为这些成员赋值,而存放数据元素的空间也需要在此处进行分配,因此整个创建工作包括了空间的创建和各个成员的赋值操作。
(2) 顺序表的插入:因为顺序表中的元素是连续存放的,元素之间的关系是通过位置的相邻性来体现的。因此在顺序表中的第i个位置上插入元素的操作可以表示为:
? 从表尾到插入位置的所有元素依次向后移动一个位置 ? 将待插入元素插入到i的位置
(3) 顺序表的删除:与插入相同,删除第i个数据元素后,需要将插入位置之后一直到表尾的数据元素依次作前移操作。
(4) 顺序表的查找:在顺序表中进行查找时,只能从第一个元素开始,逐个判断是否满足查找条件,如果找到返回元素在表中的下标,否则继续向后查找,直到表结束。 第3步:部分源代码: //结构的定义: #define ListSize 50 typedef struct
{ int * elem; /* elem表示存放数据元素的基地址*/
int length; /*当前的表长度*/ int listsize; }SeqList;
//顺序表的建立
/***************************/
//函数名:CreateList(SeqList &L,int n)
//参数: L表示创建的顺序表,n表示创建的顺序表的长度 //功能:根据给定长度n和用户输入的n个数据创建顺序表L /***************************/ void CreateList(SeqList &L,int n) {
L.elem=(int*)malloc(ListSize*sizeof(int)); if (!L.elem) exit(0); L.listsize=ListSize;
printf(\
for(int i=1;i<=n;i++) scanf(\ L.length=n; }
//顺序表的打印
/***************************/ //函数名:PrintList(SeqList L) //参数: L表示要打印的顺序表
//功能: 依次打印顺序表L中的各个数据元素的值 /***************************/ void PrintList(SeqList L) {
printf(\ for(int i=1;i<=L.length;i++) printf(\}
//顺序表的查找操作
/***************************/
//函数名:LocateList(SeqList L,int x)
//参数: L表示要查找的顺序表,x表示要查找的数据元素
//返回: int型,如果找到,返回数据元素所在的下标,找不到返回0 //功能:在顺序表中进行查找,并返回查找的元素的位置 /***************************/ int LocateList(SeqList L,int x) {
for(int i=1;i<=L.length;i++) if((L.elem[i])==x) return i; else return 0; }
//顺序表的插入
/***************************/
//函数名:InsertList(SeqList &L,int i,int e)
//参数: L表示要操作的顺序表,i表示插入元素的位置,e表示要插入的数据元素 //功能:在顺序表中将e插入到第i个数据元素的位置 void InsertList(SeqList &L,int i,int e) ;
//顺序表的删除:
void DeleteList(SeqList &L,int i); /***************************/ //函数名:DeleteList(SeqList &L,int i)
//参数: L表示要操作的顺序表,i表示删除元素的位置
//功能:在顺序表中删除第i个数据元素,删除之前将其打印出来
//主程序 int main() {
SeqList L; int i,x; int n=10; /*THE SIZE OF LIST*/ L.length=0; CreateList(L,n); /*CREATE THE LIST*/ PrintList(L); /*PRINT THE LIST*/ printf(“input the reseach element\ scanf(\ i=LocateList(L,x); printf(\ scanf(\ printf(\ scanf(\ InsertList(L, i, x); /*顺序表插入*/ PrintList(L); /*打印顺序表*/ printf(\ scanf(\ DeleteList(L,i); /*顺序表删除*/ PrintList(L); /*打印顺序表*/ }
思考:有一个表元素按值非递减有序排列的顺序表,编写一个函数实现删除顺序表中多余的值相同的元素。
2. 单链表基本操作的实现:包括单链表的创建、插入、删除。 请补全程序并调试。
单链表的建立、查找、插入、删除操作等是链表的基本操作,正确实现它们,需要首先从存储形式上理解链表。单链表的存储结构描述包含数据域和指针域两部分,这两部分构成一个结点,具体用C语言的结构体来描述。链表的操作主要是弄清楚指针的变化情况,明确头指针、当前指针的指向。
第2步:程序构思
(1) 单链表的建立(头插法)
先建立头结点,将头结点的指针域置空,然后逆位序输入元素值,生成新结点,插入到头结点之后。
(2) 单链表的插入
从单链表表头开始查找插入位置的前驱结点p,即第i-1个结点,如果找到,则新建结点,设置其数据域的值为插入的值,然后修改指针,将该结点插入到p之后;如果找不到,则插入操作失败。
(3) 单链表的删除
从单链表表头开始查找删除元素的前驱结点p,如果找到删除结点和p,则将待删除结点的数据域的值保存下来,并修改p的指针指向删除结点的后继结点;如果找不到,则删除操作失败。
第3步:部分源程序 #define NULL 0 //结构的定义:
typedef struct LNode{ int data;
struct LNode *next; } LNODE,*LinkList; //链表的建立
/***************************/
//函数名:CreateList_L(LinkList &L, int n)
//参数: L表示创建的单链表,n表示创建的单链表的长度
//功能:根据给定长度n,逆位序输入n个元素的值,建立带表头结点的单链表L。 /***************************/
void CreateList_L(LinkList &L, int n) { L = (LinkList) malloc (sizeof (LNode));
L->next = NULL; // 先建立一个带头结点的单链表 for (i = n; i > 0; --i) {
p = (LinkList) malloc (sizeof (LNode)); // 生成新结点 scanf(“%d”,&p->data); // 逆位序输入元素值 p->next = L->next; L->next = p; // 插入到表头 }
} // CreateList_L //链表的打印
/***************************/ //函数名:PrintList(LinkList L) //参数: L表示单链表的头指针
//功能:逐个打印单链表L的各个数据元素的值 /***************************/ void PrintList(LinkList L){ LinkList p; p=L;
printf(\
while(p->next!=NULL){ printf(\ p=p->next; }
printf(“----------The LinkList ended!\\n\}
//求链表的长度
/***************************/ //函数名:Listlength(LinkList L) //参数: L表示单链表的头指针
//返回:int型,返回整数值,表示单链表的长度 //功能:求单链表L的长度
/***************************/ int Listlength(LinkList L){ int i=0;
LNODE *p=L;
while(p->next!=NULL){ i++;
p=p->next; }
return i; }
//链表的插入操作
/***************************/
//函数名:InsertList(LinkList &L,int i,int e)
//参数: L表示单链表的头指针,i表示插入位置,e表示插入的数据元素的值 //返回:int型,返回1,表示插入成功,0表示插入失败 //功能:将数据元素e插入到单链表L的第i个位置上 /***************************/ int InsertList(LinkList &L,int i,int e){ }
//链表的删除操作
/***************************/
//函数名:DeleteList(LinkList &L,int i)
//参数: L表示单链表的头指针,i表示删除元素的位置 //返回:int型,返回删除元素的值
//功能:将单链表L的第i个结点删除,并返回删除元素的值 /***************************/ int DeleteList(LinkList &L,int i){ }
//主程序 int main(){ LinkList L;
int length; int i,e;
CreateList(L,10); PrintList(L);
length=Listlength(L);
printf(\ printf(\ scanf(\ DeleteList(L,i); PrintList(L);
printf(\ scanf(\ InsertList(L,i,e); PrintList(L); getchar(); }
and e:\\n\
正在阅读:
实验二 线性表的基本操作10-01
衣食住行小窍门05-14
民族民间文化进校园工作总结01-19
施工组织设计任务书(工管) - 图文12-02
赛马串词02-16
高考最新-2018年普通高等学校招生全国统一考试仿真试卷数学文(二)(附答案) 精品01-07
计算机组成原理实验-运算器组成实验报告10-12
2019年重点幼儿园学前班上学期期中考试试卷(含答案)10-22
小学学校卫生工作计划模板05-19
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 基本操作
- 线性
- 实验
- 代理词(房地产公司)
- 插花艺术复习题
- 2011年12月大学英语B精简版本复习资料20111216
- 期货基础知识押题卷六(解析)
- 高中物理选修3-2知识点
- 论科学技术社会作用的二重性
- 小学一年级新生入学仪式活动方案
- 第一原理计算 CASTEP 实战守则 - 图文
- 热处理工段长先进事迹材料
- 3.2(1)比的基本性质
- 浅谈如何提高装配式混凝土结构预制构件外观质量 - 图文
- 网上购物商城系统的毕业论文
- 甲级单位编制学生桌椅项目可行性报告(立项可研+贷款+用地+2013案例)设计方案
- 党校研究生中国特色社会主义理论体系作业(完结版)
- 船舶电气及自动化+大管轮+考试1
- 第十四章组合变形杆件强度计算
- 东升小学二年级上册《长度单位》教材分析(上交打印稿)
- 辞寒汉文化现代服装有限责任公司创业计划书
- 小学语文五年级教案:从《黄河的主人》教学实践谈反思
- Avamar简明操作指南 - 图文