数据结构实验1线性表及其应用Word格式文档下载.docx
- 文档编号:16084795
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:11
- 大小:195.14KB
数据结构实验1线性表及其应用Word格式文档下载.docx
《数据结构实验1线性表及其应用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验1线性表及其应用Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
intlen;
//当前元素个数
intlistsize;
//当前存储最大容量
}SqList;
//构造一个空的线性表L
intInitList(SqList&
L)
{
=(ElemType*)malloc(LISTSIZE*sizeof(ElemType));
if(!
exit(-2);
//分配空间失败
=0;
=LISTSIZE;
}
//在顺序线性表L中第i个位置之前插入新的元素e
intListInsert(SqList&
L,inti,ElemTypee)
if(i<
1||i>
+1)return-1;
//i值不合法
if>
=
{
ElemType*newelem=(ElemType*)realloc,+CREMENTSIZE)*sizeof(ElemType));
//存储空间已满,增加分配
if(!
newelem)exit(-2);
//分配失败
=newelem;
+=CREMENTSIZE;
}
ElemType*q=&
[i-1]);
for(ElemType*p=&
[]);
p>
=q;
--p)*(p+1)=*p;
//插入位置及其后的元素后移
*q=e;
++;
return1;
//在顺序线性表L中删除第i个元素,并用e返回其值
intListDelete(SqList&
L,inti,ElemType&
e)
return-1;
ElemType*p=&
[i-1]);
e=*p;
ElemType*q=+;
for(++p;
p<
=q+1;
++p)*(p-1)=*p;
//被删除元素之后的元素前移
;
intmain()
SqListL;
chare,ch;
inti,j,state;
InitList(L);
//构造线性表
printf("
请输入原始数据(字符串个数0~99):
L="
);
//数据初始化
gets;
for(j=1;
[j-1]!
='
\0'
;
j++)=j;
//获取表长
[j]='
操作:
插入(I)还是删除(D)\n"
//判断进行插入还是删除操作
AGAIN:
cin>
ch;
if(ch=='
I'
)
cout<
<
"
插在第几个元素之前:
//插入操作
cin>
i;
cout<
输入要插入的新元素:
e;
endl;
printf("
输入数据:
L=(%s)ListInsert(L,%d,%c)"
,i,e);
state=ListInsert(L,i,e);
elseif(ch=='
D'
删除第几个元素:
//删除操作
L=(%s)DeleteList(L,%d,e)"
,i);
state=ListDelete(L,i,e);
elsegotoAGAIN;
//操作指示符输入错误处理
endl<
正确结果:
if(state==-1)cout<
ERROR,"
L=(%s)"
;
//输出结果
if(ch=='
&
state!
=-1)cout<
e="
链式存储结构线性表程序清单:
//-----单链存储结构线性表的插入删除-----
#definenull0
typedefstructLNode
ElemTypedata;
structLNode*next;
}LNode,*LinkList;
intGetElem(LinkListL,inti,ElemType&
e)//获取第i个元素的值
LinkListp;
intj;
p=L->
next;
j=1;
while(p&
j<
i)
{
p=p->
++j;
//寻找第i个元素
p||j>
i)return-1;
//寻找失败
e=p->
data;
intListInsert(LinkList&
//在带头结点的单链线性表L中第i个元素之前插入元素e
LinkListp,s;
intj;
p=L;
j=0;
while(p&
i-1){p=p->
++j;
i-1)return-1;
s=(LinkList)malloc(sizeof(LNode));
s->
data=e;
s->
next=p->
p->
next=s;
intListDelete(LinkList&
e)
//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
LinkListp,q;
p=L;
while(p->
next&
i-1)
(p->
next)||j>
q=p->
p->
next=q->
e=q->
free(q);
intnewdata(LinkList&
L,char*ch)
intk;
//数据初始化
gets(ch);
for(k=0;
ch[k]!
k++)ListInsert(L,k+1,ch[k]);
//将初始化数据插入链表L中
OK"
returnk;
//返回链表中的元素个数
char*ch;
ch=(char*)malloc(100*sizeof(char));
//定义数组用来辅助数据初始化
LinkListL;
//头指针
LNodehead;
//头结点
L=&
head;
=null;
inti,k,state;
chare,CH,f;
k=newdata(L,ch);
//调用函数使链表数据初始化
=k;
//将元素个数存入头结点的数据域
CH;
if(CH=='
ch,i,e);
state=ListInsert(L,i,e);
++;
elseif(CH=='
ch,i);
--;
L=("
for(intm=1;
=m;
m++)//一一输出数据
GetElem(L,m,f);
f;
)"
//删除操作反馈e
实验结果:
由于两个程序的输出模式相同,在此只列一组测试数据:
L=()ListInsert(L,1,'
k'
)
L=(EHIKMOP)ListInsert(L,9,'
t'
L=(ABCEHKNPQTU)ListInsert(L,4,'
u'
L=()ListDelete(L,1,e)
L=(DEFILMNORU)ListDelete_Sq(L,5,e)
L=(CD)ListDelete_Sq(L,1,e)
测试过程中所注意到的问题主要还是输出与输入界面的问题,通过灵活使用cout和cin函数来不断改进。
另外,在用户端看来在设计算法时程序的可重复性未考虑,显得不够人性化。
时间复杂度分析:
假定线性表有n个节点,顺序存储结构下,插入程序段以*(p+1)=*p作为基本操作的原操作,并讨论在最坏情况下的时间复杂度,记T(n)=O(n);
删除程序段以*(p-1)=*(p)作为基本操作的原操作,并讨论在最坏情况下的时间复杂度,记T’(n)=O(n)。
链式存储结构下,插入程序段以p=p->
next作为基本操作的原操作,并讨论在最坏情况下的时间复杂度,记T(n)=O(n);
删除程序段以p=p->
next作为基本操作的原操作,并讨论在最坏情况下的时间复杂度,记T’(n)=O(n)。
总结和感想:
改进设想在于减少中间变量,优化数据初始化操作,和增加程序可重复性。
具体操作完成估计就该把上述程序全面修改了,还包括算法的修改和增进。
从完成该实验的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 线性 及其 应用
![提示](https://static.bdocx.com/images/bang_tan.gif)