数据结构实验线性表基本操作Word文档下载推荐.docx
- 文档编号:14019701
- 上传时间:2022-10-17
- 格式:DOCX
- 页数:18
- 大小:75.99KB
数据结构实验线性表基本操作Word文档下载推荐.docx
《数据结构实验线性表基本操作Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构实验线性表基本操作Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
四、设计方案(算法设计)
㈠采用的数据结构
本程序顺序表的数据逻辑结构为线性结构,存储结构为顺序存储;
链表的数据逻辑结构依然为线性结构,存储结构为链式结构。
㈡设计的主要思路
1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度,顺序表的长度和元素由用户输入;
2.利用前面建立的顺序表,对顺序表进行插入、删除及合并操作;
3.建立一个带头结点的单链表,结点的值域为整型数据,链表的元素由用户输入;
4.对前面建立的链表进行插入、删除及连个链表的连接操作;
㈢算法描述
1、顺序表
voidInit(sqlist&
);
//初始化顺序表
BOOLInse(sqlist&
int,char);
//在线性表中插入元素
BOOLdel(sqlist&
int,char&
//在线性表中删除元素
intLoc(sqlist,char);
//在线性表中定位元素
voidprint(sqlist);
//输出顺序表
voidcombine(sqlist&
sqlist&
//两个线性表的合并
2、链表
voidCreaL(LinkList&
int);
//生成一个单链表
BOOLLInsert(LinkList&
//在单链表中插入一个元素
BOOLLDele(LinkList&
//在单链表中删除一个元素
BOOLLFind_key(LinkList,char,int&
//按关键字查找一个元素
BOOLLFind_order(LinkList,char&
//按序号查找一个元素
voidLPrint(LinkList);
//显示单链表所有元素
voidLUnion(LinkList&
LinkList&
//两个链表的连接
五、程序代码
#include<
stdio.h>
conio.h>
#defineMax116
enumBOOL{False,True};
typedefstruct
{
charelem[Max];
//线性表
intlast;
//last指示当前线性表的长度
}sqlist;
voidmain()
sqlistL1;
sqlistL2;
sqlistL3;
intloc,S=1;
charj,ch;
BOOLtemp;
printf("
本程序用来实现顺序结构的线性表。
\n"
可以实现查找、插入、删除、两个线性表的合并等操作。
Init(L1);
while(S)
{
printf("
\n请选择:
1.显示所有元素\n"
2.插入一个元素\n"
3.删除一个元素\n"
4.查找一个元素\n"
5.线性表的合并\n"
6.退出程序\n\n"
scanf("
%c"
&
j);
switch(j)
case'
1'
:
print(L1);
break;
case'
2'
{printf("
请输入要插入的元素(一个字符)和插入位置:
printf("
格式:
字符,位置;
例如:
a,2\n"
scanf("
%c,%d"
ch,&
loc);
temp=Inse(L1,loc,ch);
if(temp==False)printf("
插入失败!
else{printf("
插入成功!
print(L1);
}
break;
3'
请输入要删除元素的位置:
"
%d"
temp=del(L1,loc,ch);
if(temp==True)printf("
删除了一个元素:
%c\n"
ch);
elseprintf("
该元素不存在!
删除该元素后的线性表为:
4'
请输入要查找的元素:
ch);
loc=Loc(L1,ch);
if(loc!
=-1)printf("
该元素所在位置:
%d\n"
loc+1);
%c不存在!
5'
请输入要进行合并的第二个线性表:
Init(L2);
combine(L1,L2,L3);
合并前的两个线性表如下:
print(L1);
print(L2);
输出合并后的线性表如下:
print(L3);
default:
S=0;
程序结束,按任意键退出!
}
getch();
}
v)//初始化线性表
inti;
请输入初始线性表长度:
n="
v.last);
请输入从1到%d的各元素(字符),例如:
abcdefg\n"
v.last);
getchar();
for(i=0;
i<
v.last;
i++)
%c"
v.elem[i]);
v,intloc,charch)//插入一个元素,成功返回True,失败返回False
if((loc<
1)||(loc>
v.last+1))
插入位置不合理!
returnFalse;
elseif(v.last>
=Max)
{printf("
线性表已满!
else{
for(i=v.last-1;
i>
=loc-1;
i--)
v.elem[i+1]=v.elem[i];
v.elem[loc-1]=ch;
v.last++;
returnTrue;
BOOLdel(sqlist&
v,intloc,char&
ch)//删除一个元素,成功返回True,并用ch返回该元素值,失败返回False
intj;
if(loc<
1||loc>
v.last)
ch=v.elem[loc-1];
for(j=loc-1;
j<
v.last-1;
j++)
v.elem[j]=v.elem[j+1];
v.last--;
intLoc(sqlistv,charch)//在线性表中查找ch的位置,成功返回其位置,失败返回-1
inti=0;
while(i<
v.last&
&
v.elem[i]!
=ch)i++;
if(v.elem[i]==ch)
returni;
elsereturn(-1);
voidprint(sqlistv)//显示当前线性表所有元素
%c"
v.elem[i]);
s1,sqlist&
s2,sqlist&
s3)//顺序表的连接
inti=0;
intj=0;
intk=0;
while(i<
s1.last&
j<
s2.last)
if(s1.elem[i]<
=s2.elem[j])
{
s3.elem[k]=s1.elem[i];
i++;
else
s3.elem[k]=s2.elem[j];
j++;
k++;
if(i==s1.last)
while(j<
s2.last)
k++;
if(j==s2.last)
while(i<
s1.last)
s3.last=k;
2、链表的操作
stdlib.h>
#defineLENsizeof(LNode)
typedefstructnode
chardata;
structnode*next;
}LNode,*LinkList;
voidLUnion(LinkLi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 线性 基本 操作