数据结构实验1线性表及其应用Word格式文档下载.docx

上传人:b****5 文档编号:16084795 上传时间:2022-11-18 格式:DOCX 页数:11 大小:195.14KB
下载 相关 举报
数据结构实验1线性表及其应用Word格式文档下载.docx_第1页
第1页 / 共11页
数据结构实验1线性表及其应用Word格式文档下载.docx_第2页
第2页 / 共11页
数据结构实验1线性表及其应用Word格式文档下载.docx_第3页
第3页 / 共11页
数据结构实验1线性表及其应用Word格式文档下载.docx_第4页
第4页 / 共11页
数据结构实验1线性表及其应用Word格式文档下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构实验1线性表及其应用Word格式文档下载.docx

《数据结构实验1线性表及其应用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验1线性表及其应用Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。

数据结构实验1线性表及其应用Word格式文档下载.docx

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)。

总结和感想:

改进设想在于减少中间变量,优化数据初始化操作,和增加程序可重复性。

具体操作完成估计就该把上述程序全面修改了,还包括算法的修改和增进。

从完成该实验的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1