线性表的顺序表示与链式表示Word格式文档下载.docx
- 文档编号:16366104
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:20
- 大小:164.07KB
线性表的顺序表示与链式表示Word格式文档下载.docx
《线性表的顺序表示与链式表示Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《线性表的顺序表示与链式表示Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
4.整理并上交实验报告
环
境
硬件平台:
普通的PC机
软件平台:
Windows7操作系统
编程环境:
VisualC++6.0
内
容
1.分别建立包含10个数据元素的顺序线性表和链式线性表;
2.从键盘输入一个数据元素和插入位置k,将元素插入到线性表中第k(包含0号位置)个位置;
3.从键盘输入一个数据元素关键字或位置k(包含1号位置),从线性表中删除相应数据元素;
4.能完成查找功能;
5.给出程序及插入、删除前和插入、删除后线性表结果。
算
法
描
述
步
骤
算法描述:
1.链式线性表:
定义结构体:
typedefstructLNode
{
ElemTypedata;
structLNode*next;
}LNode,*LinkList;
构造函数——功能:
查找第i个元素并返回
voidGetElem(LinkListL,inti,ElemType*e)
{
LNode*p;
intj=1;
p=L->
next;
while(p&
&
j<
i)
{
p=p->
++j;
}
if(!
p||j>
i)printf("
不存在,查找错误\n"
);
else
*e=p->
data;
}
插入元素
voidListInsert_L(LinkList*L,inti,ElemTypee)
LinkListp=*L,s=NULL;
intj=0;
i-1){p=p->
i-1)printf("
插入位置错误\n"
s=(LinkList)malloc(sizeof(LNode));
s->
data=e;
next=p->
p->
next=s;
删除元素
voidListDelet_L(LinkList*L,inti,ElemType*e)
LNode*p=*L,*q=NULL;
while(p->
next&
i-1)
(p->
next)||j>
删除位置错误"
q=p->
p->
next=q->
*e=q->
free(q);
建立链表输入n个ElemType类型的数
voidCreatList(LinkList*L,intn)
LinkListp=NULL,q=NULL;
inti;
ElemTypem;
(*L)=(LinkList)malloc(sizeof(LNode));
(*L)->
next=NULL;
p=(LinkList)malloc(sizeof(LNode));
q=p;
scanf("
%d"
&
m);
data=m;
next=p;
for(i=1;
i<
n;
i++)
q->
主函数:
intmain()
LinkListL=NULL;
inti,p=1,m;
ElemTypee;
printf("
请输入15个元素:
"
CreatList(&
L,15);
输出表中的15个元素:
DisList(L);
while(p)
1.插入元素\n"
"
2.删除元素\n"
3.查找元素\n"
4.显示链表\n"
5.退出链表:
\n"
switch(m)
case1:
printf("
请输入要插入的位置:
i);
printf("
请输入要插入的元素值:
scanf("
e);
ListInsert_L(&
L,i,e);
break;
case2:
请输入要删除元素的位置:
i);
ListDelet_L(&
L,i,&
需要删除的元素值为:
%d\n"
e);
case3:
请输入需要查找的位置:
GetElem(L,i,&
该位置的元素值为:
case4:
显示出链表的数为:
DisList(L);
case5:
p=0;
return0;
2.顺序线性表:
typedefstruct
ElemType*elem;
intlength;
intlistsize;
}SqList;
初始化线性表:
StatusInitList_Sq(SqList*L)
L->
elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
L->
elem)returnOVERFLOW;
//存储分配失败
length=0;
//空表长度为0
listsize=LIST_INIT_SIZE;
//初始存储容量
returnOK;
向表中插入元素
StatusListInsert_Sq(SqList*L,inti,ElemTypee)
ElemType*q,*p,*newbase;
if(i<
1||i>
length+1)
returnERROR;
if(L->
length>
=L->
listsize)//若当前表长>
=计划表长则开辟新空间
newbase=(ElemType*)realloc(L->
elem,(L->
listsize+LISTINCREMENT)*sizeof(ElemType));
newbase)returnERROR;
elem=newbase;
listsize+=LISTINCREMENT;
q=&
(L->
elem[i-1]);
for(p=&
elem[L->
length-1]);
p>
=q;
p--)*(p+1)=*p;
*q=e;
++L->
length;
删除表中的元素
StatusListDelete_Sq(SqList*L,inti,ElemType*e)
ElemType*p,*q;
length+1)returnERROR;
p=&
*e=*p;
q=(L->
elem+L->
length-1);
for(++p;
p<
p++)*(p-1)=*p;
--L->
查找表中元素
intListFind(SqListL,intk)
returnL.elem[k-1];
SqListLst;
inti,j,n=15,a,k,p=1;
if(InitList_Sq(&
Lst)==OK)
=n;
if(ListInsert_Sq(&
Lst,i,i)!
=OK)break;
线性表中的元素为:
for(i=0;
Lst.length;
%d"
Lst.elem[i]);
4.显示顺序表\n"
5.退出\n"
请选择操作:
j);
switch(j)
请输入要插入的元素:
a);
k);
ListInsert_Sq(&
Lst,k,a);
ListDelete_Sq(&
Lst,k,&
请输入查找元素的位置:
位置为%d的元素为%d\n"
k,ListFind(Lst,k));
调
试
过
程
结
果
1.创建链表,插入,删除,功能。
2.链表的查找,显示,退出,功能。
3.顺序表的创建与插入功能。
4.顺序表的删除,查找,功能。
5.顺序表的显示,退出,功能。
总
通过这次实验,我更好的掌握了顺序表的链式存储的基本方法,比如链表的初始化,查找,插入,删除等基本函数的调用,以及在链表中对于指针传递地址的应用。
附
录
1.链式线性表的源程序:
/*链式线性表*/
#include<
stdio.h>
//带头结点的链表操作
stdlib.h>
#defineERROR0
#defineOK1
#defineOVERFLOW-1
typedefintElemType;
voidGetElem(LinkListL,inti,ElemType*e)//查找第i个元素并返回
voidListInsert_L(LinkList*L,inti,ElemTypee)//插入元素
voidListDelet_L(LinkList*L,inti,ElemType*e)//删除元素
voidCreatList(LinkList*L,intn)//建立链表输入n个ElemType类型的数
voidDisList(LinkListL)
LinkListp=L->
p->
data);
2.顺序线性表的源程序:
/*顺序表线性表*/
conio.h>
#defineTURE1
#defineFAUSE0
#defineINFEASIBLE-1
#defineOVERFLOW-2
#defineLIST_INIT_SIZE15
#defineLISTINCREMENT4
typedefintStatus;
StatusInitList_Sq(SqList*L)//初始化线性表
StatusListInsert_Sq(SqList*L,inti,ElemTypee)//向表中插入元素
StatusListDelete_Sq(SqList*L,inti,ElemType*e)//删除表中的元素
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性 顺序 表示 链式