


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.实验一顺序表与链表一、实验目的1、掌握线性表中元素的前驱、后续的概念。2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。3、对线性表相应算法的时间复杂度进行分析。4、理解顺序表、链表数据结构的特点(优缺点)。二、实验预习说明以下概念1、线性表:2、顺序表:3、链表:三、实验内容和要求1、阅读下面程序,在横线处填写函数的基本功能。并运行程序,写出结果。#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1#define INIT_SIZE 5/*初始分配的顺序表长度*/#define INC
2、REM 5/*溢出时,顺序表长度的增量*/typedef int ElemType; /*定义表元素的类型*/typedef struct SqlistElemType *slist;/*存储空间的基地址*/int length;/*顺序表的当前长度*/int listsize;/*当前分配的存储空间*/Sqlist;int InitList_sq(Sqlist *L); /*构造一个空的线性表L*/intCreateList_sq(Sqlist*L,intn);/*构造顺序表的长度为n*/int ListInsert_sq(Sqlist *L,int i,ElemTypee);/*在 L 中
3、第 i 个位置之前插入新的数据元素 e,L 的长度加 1*/int PrintList_sq(Sqlist *L); /*输出顺序表的元素*/int ListDelete_sq(Sqlist *L,int i); /*删除第 i 个元素 */int ListLocate(Sqlist *L,ElemType e); /*查找值为e 的元素 */int InitList_sq(Sqlist *L).L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType);if(!L->slist) return ERROR;L->length=
4、0;L->listsize=INIT_SIZE;return OK;/*InitList*/int CreateList_sq(Sqlist *L,int n)ElemType e;int i;for(i=0;i<n;i+)printf("input data %d",i+1);scanf("%d",&e);if(!ListInsert_sq(L,i+1,e)return ERROR;return OK;/*CreateList*/* 输出顺序表中的元素*/int PrintList_sq(Sqlist *L)int i;for(i=
5、1;i<=L->length;i+)printf("%5d",L->slisti-1);return OK;/*PrintList*/int ListInsert_sq(Sqlist *L,int i,ElemType e)int k;if(i<1|i>L->length+1)return ERROR;if(L->length>=L->listsize)L->slist=(ElemType*)realloc(L->slist,(INIT_SIZE+INCREM)*sizeof(ElemType);if(!L-
6、>slist)return ERROR;L->listsize+=INCREM;for(k=L->length-1;k>=i-1;k-)L->slistk+1= L->slistk;L->slisti-1=e;L->length+;return OK;./*ListInsert*/* 在顺序表中删除第i 个元素 */int ListDelete_sq(Sqlist *L,int i)/* 在顺序表中查找指定值元素,返回其序号*/int ListLocate(Sqlist *L,ElemType e)int main()Sqlist sl;int
7、n,m,k;printf("please input n:"); /*输入顺序表的元素个数*/scanf("%d",&n);if(n>0)printf("n1-Create Sqlist:n");InitList_sq(&sl);CreateList_sq(&sl,n);printf("n2-Print Sqlist:n");PrintList_sq(&sl);printf("nplease input insert location and data:(locati
8、on,data)n"); scanf("%d,%d",&m,&k);ListInsert_sq(&sl,m,k);printf("n3-Print Sqlist:n");PrintList_sq(&sl);printf("n");elseprintf("ERROR");return 0;运行结果.算法分析调用ListInsert_sq()函数,进行插入操作,并输出插入新元素后的状态, 时间复杂度,空间复杂度较少,2、为第 1 题补充删除和查找功能函数,并在主函数中补充代码验
9、证算法的正确性。删除算法代码:int ListDelete_sq(Sqlist *L,int i)int p;if(i<1|i>L->length)return ERROR;for(p=i-1;p<L->length-1;p+)L->slistp=L->slistp+1;L->length -;return OK;运行结果.算法分析主函数调用ListDelete_sq实现删除操作,在输出删除之后的线性表,时间复杂度低查找算法代码:int ListLocate(Sqlist *L,ElemType e)int i=0;while(i<=L-&
10、gt;length) && (L->slist i!=e)i+;if(i<=L->length )return (i+1);elsereturn -1;.运行结果算法分析主函数通过调用ListLocate实现查找功能,然后输出查找元素的序号,时间复杂度低3、阅读下面程序,在横线处填写函数的基本功能。并运行程序,写出结果。#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1typedef int ElemType; /*定义表元素的类型*/typedef struct
11、 LNode /*线性表的单链表存储*/ElemType data;struct LNode *next;LNode,*LinkList;LinkListCreateList(intn);/*构 造 顺 序 表 的 长 度 为n.*/void PrintList(LinkList L); /*输出带头结点单链表的所有元素*/int GetElem(LinkList L,int i,ElemType *e); /*在顺序表L 中,将第 i个元素存在时,替换成e*/LinkList CreateList(int n)LNode *p,*q,*head;int i;head=(LinkList)ma
12、lloc(sizeof(LNode);head->next=NULL;p=head;for(i=0;i<n;i+)q=(LinkList)malloc(sizeof(LNode);printf("inputdata %i:",i+1);scanf("%d",&q->data);/*输入元素值 */q->next=NULL;/*结点指针域置空*/p->next=q;/*新结点连在表末尾*/p=q;return head;/*CreateList*/void PrintList(LinkList L)LNode *p;p
13、=L->next; /*p指向单链表的第1 个元素 */while(p!=NULL)printf("%5d",p->data);p=p->next;/*PrintList*/int GetElem(LinkList L,int i,ElemType *e)LNode *p;int j=1;p=L->next;while(p&&j<i)p=p->next;j+;if(!p|j>i)return ERROR;*e=p->data;return OK;/*GetElem*/int main()int n,i;Elem
14、Type e;.LinkList L=NULL;/*定义指向单链表的指针*/printf("please input n:"); /*输入单链表的元素个数*/scanf("%d",&n);if(n>0)printf("n1-Create LinkList:n");L=CreateList(n);printf("n2-Print LinkList:n");PrintList(L);printf("n3-GetElem from LinkList:n");printf("in
15、put i=");scanf("%d",&i);if(GetElem(L,i,&e)printf("No%i is %d",i,e);elseprintf("not exists");elseprintf("ERROR");return 0;运行结果算法分析主函数调用GetElem函数实现输出序号所对应的元素,时间复杂度低4、为第 3 题补充插入功能函数和删除功能函数。并在主函数中补充代码验证算法的正确性。插入算法代码:intListInsert_sq(LNode*L,inti,ElemT
16、ypee)intk;.if(i<1|i>L->length+1)returnERROR;if(L->length>=L->listsize)L->data=(ElemType*)realloc(L->data,(INIT_SIZE+INCREM)*sizeof(ElemType);if(!L->data)returnERROR;L->listsize+=INCREM;for(k=L->length-1;k>=i-1;k-)L->datak+1= L->datak;L->slisti-1=e;L->length+;return OK;/*ListInsert*/运行结果.算法分析调用 ListInsert_sq()函数,进行插入操作,并
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国三相可控硅直流调速装置数据监测研究报告
- 2025至2030年中国HIPS塑胶料数据监测研究报告
- 劳动合同(20XX年完整版)
- 遗产继承金融资产管理合同(2篇)
- 采购与分包管理合同(2篇)
- 高等教育自学考试《00074中央银行概论》模拟试卷三
- 新浪乐居万达中央旅游城岁末营销方案
- 《人工智能应用与发展:高中人工智能学习指南》
- 商业推广项目合作协议书
- 环保技术研发与推广战略合作协议
- 辅酶Q10-心脏安全卫士课件
- 申根签证在职证明模板中英双语备课讲稿
- 儿童吸入性肺炎的诊断与治疗
- 建筑QC小组成果报告建筑QC小组成果报告八篇
- 供应室提高腔镜器械清洗质量PDCA案例
- Unit1DiscoveringUsefulStructures课件-高中英语人教版选择性必修第三册
- JJF 1071-2010国家计量校准规范编写规则
- GB/T 24803.4-2013电梯安全要求第4部分:评价要求
- GB/T 13814-1992镍及镍合金焊条
- GB 4806.7-2016食品安全国家标准食品接触用塑料材料及制品
- 肾病综合征【内科学课件】
评论
0/150
提交评论