数据结构实验线性表基本操作.docx

上传人:b****1 文档编号:1099834 上传时间:2022-10-17 格式:DOCX 页数:18 大小:75.99KB
下载 相关 举报
数据结构实验线性表基本操作.docx_第1页
第1页 / 共18页
数据结构实验线性表基本操作.docx_第2页
第2页 / 共18页
数据结构实验线性表基本操作.docx_第3页
第3页 / 共18页
数据结构实验线性表基本操作.docx_第4页
第4页 / 共18页
数据结构实验线性表基本操作.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构实验线性表基本操作.docx

《数据结构实验线性表基本操作.docx》由会员分享,可在线阅读,更多相关《数据结构实验线性表基本操作.docx(18页珍藏版)》请在冰豆网上搜索。

数据结构实验线性表基本操作.docx

数据结构实验线性表基本操作

《数据结构》课程

实验报告

实验名称:

线性表基本操作的实现

实验室(中心):

学生信息:

专业班级:

指导教师:

实验完成时间:

2016

实验一线性表基本操作的实现

一、实验目的

1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。

2.掌握线性表的顺序存储结构的定义及C语言实现。

3.掌握线性表的链式存储结构——单链表的定义及C语言实现。

4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。

5.掌握线性表在链式存储结构——单链表中的各种基本操作。

二、实验内容及要求

1.顺序线性表的建立、插入、删除及合并。

2.链式线性表的建立、插入、删除及连接。

三、实验设备及软件

计算机、MicrosoftVisualC++6.0软件

四、设计方案(算法设计)

㈠采用的数据结构

本程序顺序表的数据逻辑结构为线性结构,存储结构为顺序存储;链表的数据逻辑结构依然为线性结构,存储结构为链式结构。

㈡设计的主要思路

1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度,顺序表的长度和元素由用户输入;

2.利用前面建立的顺序表,对顺序表进行插入、删除及合并操作;

3.建立一个带头结点的单链表,结点的值域为整型数据,链表的元素由用户输入;

4.对前面建立的链表进行插入、删除及连个链表的连接操作;

㈢算法描述

1、顺序表

voidInit(sqlist&);//初始化顺序表

BOOLInse(sqlist&,int,char);//在线性表中插入元素

BOOLdel(sqlist&,int,char&);//在线性表中删除元素

intLoc(sqlist,char);//在线性表中定位元素

voidprint(sqlist);//输出顺序表

voidcombine(sqlist&,sqlist&,sqlist&);//两个线性表的合并

2、链表

voidCreaL(LinkList&,int);//生成一个单链表

BOOLLInsert(LinkList&,int,char);//在单链表中插入一个元素

BOOLLDele(LinkList&,int,char&);//在单链表中删除一个元素

BOOLLFind_key(LinkList,char,int&);//按关键字查找一个元素

BOOLLFind_order(LinkList,char&,int);//按序号查找一个元素

voidLPrint(LinkList);//显示单链表所有元素

voidLUnion(LinkList&,LinkList&,LinkList&,int);//两个链表的连接

五、程序代码

1、顺序表

#include

#include

#defineMax116

enumBOOL{False,True};

typedefstruct

{

charelem[Max];//线性表

intlast;//last指示当前线性表的长度

}sqlist;

voidInit(sqlist&);

BOOLInse(sqlist&,int,char);//在线性表中插入元素

BOOLdel(sqlist&,int,char&);//在线性表中删除元素

intLoc(sqlist,char);//在线性表中定位元素

voidprint(sqlist);

voidcombine(sqlist&,sqlist&,sqlist&);

voidmain()

{

sqlistL1;

sqlistL2;

sqlistL3;

intloc,S=1;

charj,ch;

BOOLtemp;

printf("本程序用来实现顺序结构的线性表。

\n");

printf("可以实现查找、插入、删除、两个线性表的合并等操作。

\n");

Init(L1);

while(S)

{

printf("\n请选择:

\n");

printf("1.显示所有元素\n");

printf("2.插入一个元素\n");

printf("3.删除一个元素\n");

printf("4.查找一个元素\n");

printf("5.线性表的合并\n");

printf("6.退出程序\n\n");

scanf("%c",&j);

switch(j)

{

case'1':

print(L1);break;

case'2':

{printf("请输入要插入的元素(一个字符)和插入位置:

\n");

printf("格式:

字符,位置;例如:

a,2\n");

scanf("%c,%d",&ch,&loc);

temp=Inse(L1,loc,ch);

if(temp==False)printf("插入失败!

\n");

else{printf("插入成功!

\n");

print(L1);

}

break;

}

case'3':

{printf("请输入要删除元素的位置:

");

scanf("%d",&loc);

temp=del(L1,loc,ch);

if(temp==True)printf("删除了一个元素:

%c\n",ch);

elseprintf("该元素不存在!

\n");

printf("删除该元素后的线性表为:

");

print(L1);

break;

}

case'4':

{printf("请输入要查找的元素:

");

scanf("%c",&ch);

loc=Loc(L1,ch);

if(loc!

=-1)printf("该元素所在位置:

%d\n",loc+1);

elseprintf("%c不存在!

\n",ch);

break;

}

case'5':

{printf("请输入要进行合并的第二个线性表:

");

Init(L2);

combine(L1,L2,L3);

printf("合并前的两个线性表如下:

\n");

print(L1);

print(L2);

printf("输出合并后的线性表如下:

\n");

print(L3);

break;

}

default:

S=0;printf("程序结束,按任意键退出!

\n");

}

}

getch();

}

voidInit(sqlist&v)//初始化线性表

{

inti;

printf("请输入初始线性表长度:

n=");

scanf("%d",&v.last);

printf("请输入从1到%d的各元素(字符),例如:

abcdefg\n",v.last);

getchar();

for(i=0;i

scanf("%c",&v.elem[i]);

}

BOOLInse(sqlist&v,intloc,charch)//插入一个元素,成功返回True,失败返回False

{

inti;

if((loc<1)||(loc>v.last+1))

{

printf("插入位置不合理!

\n");

returnFalse;

}

elseif(v.last>=Max)

{printf("线性表已满!

\n");

returnFalse;

}

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)

returnFalse;

else{

ch=v.elem[loc-1];

for(j=loc-1;j

v.elem[j]=v.elem[j+1];

v.last--;

returnTrue;

}

}

intLoc(sqlistv,charch)//在线性表中查找ch的位置,成功返回其位置,失败返回-1

{

inti=0;

while(i

=ch)i++;

if(v.elem[i]==ch)

returni;

elsereturn(-1);

}

voidprint(sqlistv)//显示当前线性表所有元素

{

inti;

for(i=0;i

printf("%c",v.elem[i]);

printf("\n");

}

voidcombine(sqlist&s1,sqlist&s2,sqlist&s3)//顺序表的连接

{

inti=0;

intj=0;

intk=0;

while(i

{

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

{

s3.elem[k]=s2.elem[j];

k++;

j++;

}

}

if(j==s2.last)

{

while(i

{

s3.elem[k]=s1.elem[i];

k++;

}

}

s3.last=k;

}

 

2、链表的操作

#include

#include

#include

#defineLENsizeof(LNode)

enumBOOL{False,True};

typedefstructnode

{

chardata;

structnode*next;

}LNode,*LinkList;

voidCreaL(LinkList&,int);//生成一个单链表

BOOLLInsert(LinkList&,int,char);//在单链表中插入一个元素

BOOLLDele(LinkList&,int,char&);//在单链表中删除一个元素

BOOLLFind_key(LinkList,char,int&);//按关键字查找一个元素

BOOLLFind_order(LinkList,char&,int);//按序号查找一个元素

voidLPrint(LinkList);//显示单链表所有元素

voidLUnion(LinkLi

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

当前位置:首页 > PPT模板 > 其它模板

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

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