数据结构线性表的顺序存储结构C语言实现.docx

上传人:b****6 文档编号:8488211 上传时间:2023-01-31 格式:DOCX 页数:16 大小:147.82KB
下载 相关 举报
数据结构线性表的顺序存储结构C语言实现.docx_第1页
第1页 / 共16页
数据结构线性表的顺序存储结构C语言实现.docx_第2页
第2页 / 共16页
数据结构线性表的顺序存储结构C语言实现.docx_第3页
第3页 / 共16页
数据结构线性表的顺序存储结构C语言实现.docx_第4页
第4页 / 共16页
数据结构线性表的顺序存储结构C语言实现.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据结构线性表的顺序存储结构C语言实现.docx

《数据结构线性表的顺序存储结构C语言实现.docx》由会员分享,可在线阅读,更多相关《数据结构线性表的顺序存储结构C语言实现.docx(16页珍藏版)》请在冰豆网上搜索。

数据结构线性表的顺序存储结构C语言实现.docx

数据结构线性表的顺序存储结构C语言实现

数学与信息技术学院2016~2017(下)学年

计科专业2015级《数据结构》实验报告1

学号:

2015201018姓名:

汪继超

实验名称

线性表的顺序存储结构

完成时间

实验目的

1.掌握线性表的概念,掌握顺序表的概念及其各种运算的原理。

2.通过对线性表的查找、插入和删除算法的实现以加深对线性表的顺序存储结构的理解,为加强线性表在实际中的应用打下基础。

3.用C语言实现并上机调试通过,认真填写实验报告

实验内容

1.已知某线性表(a1,a2,……an)=(1,2,……,n),利用C语言编程完成以下操作:

(1)定义函数initsq_L():

创建该线性表的顺序存储结构;

(2)定义函数insertsq_L():

在第I个数据元素前插入X,I和X均用键盘输入;

(3)定义函数deletesq_L():

将原顺序表中的Ai删除,I由键盘输入;

(4)定义函数printsq_L():

输出线性表的内容。

提示:

该线性表的数据可以是一组学生的成绩。

实验要求

用C语言实现并上机调试通过,认真填写实验报告。

掌握线性表的概念,掌握顺序表的概念及其各种运算的原理。

实验过程:

#include

#include

#include

#include

#defineLIST_INIT_SIZE10

#defineLISTINCREMENT10

typedefintElemType;

typedefstruct{

ElemType*elem;

intlength;

intlistsize;

}SqList;

voidcolor(constunsignedshortcolor1)//颜色函数

{

/*仅限改变0-15的颜色;如果在0-15那么实现他的颜色因为如果超过15后面的改变的是文本背景色*/

if(color1>=0&&color1<=15)

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color1);

//如果不在0-15的范围颜色,那么改为默认的颜色白色;

else

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);

}

voidinitsq_L(SqList*L)//表初始化

{

L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//开辟空间

if(!

L->elem)

{

printf("Allocationerror.\n");

exit(0);

}

L->length=0;

L->listsize=LIST_INIT_SIZE;

color(13);

printf("\n表初始化成功!

\n");

color(10);

}

voidprintsq_L(SqList*L)//输出

{

inti;

for(i=0;ilength;i++)

{

printf("%5d",L->elem[i]);

if((i+1)%10==0)printf("\n");

}

printf("\n");

}

voiddeletesq_L(SqList*L,inti)//删除算法操作

{

intk,j;

color(13);

printf("\n顺序表当前数据:

\n");

printsq_L(L);

color(10);

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

");

scanf("%d",&k);

color(13);

printf("\n顺序表删除元素前:

\n");

printsq_L(L);

if((k<1)||(k>L->length))exit

(1);

for(j=k;j<=L->length;j++)

L->elem[j-1]=L->elem[j];

--L->length;

printf("顺序表删除元素后:

\n");

printsq_L(L);

color(10);

}

/*

intLocateElem_Sq(SqList*L,ElemTypee,void(*compare)(ElemType,ElemType))

{

int*p;

//在线性表L中查找第一个值与e满足compare()的元素的位序

//若找到,则返回其在L中的位序,否则返回0

inti=1;

p=L->elem;

while((i<=L->length)&&(!

(*compare)(*p++,5)))++i;

if(i<=L->length)returni;

elsereturn0;

}

*/

voidsearch_L(SqList*L,ElemTypee)//查找操作

{

intj,flag=0;

color(13);

printf("\n顺序表当前数据:

");

printsq_L(L);

color(10);

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

");

scanf("%d",&e);

color(13);

for(j=0;jlength;j++)

if(L->elem[j]==e)

{

flag=1;

printf("\n找到元素:

%d位置为%d\n",L->elem[j],j+1);

color(10);

}

if(flag==0)printf("\n没有找到该元素\n");

color(10);

}

voidmodify_L(SqList*L,ElemTypee1,ElemTypee2)//修改操作

{

intj,n,flag=0;

color(13);

printf("\n顺序表当前数据:

");

printsq_L(L);

color(10);

printf("\n请输入要修改的元素:

");

scanf("%d",&e1);

color(13);

for(j=0;jlength;j++)

if(L->elem[j]==e1)

{

flag=1;

printf("\n找到元素:

%d位置为%d",L->elem[j],j+1);

printf("\n\n[1.修改2.不修改]请输入:

");

scanf("%d",&n);

if(n!

=1)break;

if(n==1)

{

printf("\n元素%d改为:

",e1);

scanf("%d",&e2);

L->elem[j]=e2;

printf("\n修改成功!

\n");

printf("\n修改后顺序表的数据:

");

printsq_L(L);

break;

}

}

if(flag==0)printf("\n没有找到该元素\n");

color(10);

}

voidinsertsq_L(SqList*L,inti,ElemTypee)//插入算法函数

{

ElemType*newbase;

intj;

if(i<0||i>L->length)

{

printf("\n插入元素不合法!

\n");

exit(0);

}

if(L->length>=L->listsize)

{

//开辟更大的空间

newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));

if(!

newbase)exit

(1);

L->elem=newbase;

L->listsize+=LISTINCREMENT;

}

for(j=L->length-1;j>=i;--j)

L->elem[j+1]=L->elem[j];

L->elem[i]=e;

++L->length;

}

voidInsertsq_L(SqList*L,inti,ElemTypee)//插入算法函数【面向用户】

{

intk,s;

color(13);

printf("\n顺序表当前数据:

\n");

printsq_L(L);

color(10);

printf("请输入插入的位置和元素,以空格隔开:

");

scanf("%d%d",&k,&s);

color(13);

/*先判断位置是否合法,合法执行插入操作,反之则不执行。

*/

if(k<0||k>L->length)

{

printf("\n插入元素不合法!

\n");

}

else

{

printf("\n顺序表插入元素前:

\n");

printsq_L(L);

insertsq_L(L,k-1,s);

printf("\n顺序表插入元素后:

\n");

printsq_L(L);

}

color(10);

}

voidjianbiao(SqList*L)//建表:

往表里放元素

{

inti,p,count;

color(13);

printf("\n请输入您要创建的数据条数:

");

scanf("%d",&count);

printf("\n请输入数据:

");

for(i=0;i

{

scanf("%d",&p);

insertsq_L(L,i,p);

}

fflush(stdin);//清空在此前输入缓冲区

printf("\n已创建数据:

");

printsq_L(L);

color(10);

}

voidMenu()

{

printf("欢迎来到顺序表算法操作中心\n\n");

printf("************************************菜单**************************************\n");

printf("*1.表初始化2.建表*\n");

printf("*3.插入算法操作4.删除算法操作*\n");

printf("*5.查找算法操作6.修改算法操作*\n");

printf("*7.打印算法操作0.退出*\n");

printf("******************************************************************************\n");

}

voidmain()

{

inte1=0,e2=0,i=0,e=0,n,flag;//b为元素位置,c为元素

chara;

system("title汪继超:

2015201018");

SqList*L;

L=(SqList*)malloc(sizeof(SqList));

color(10);

start:

do

{

Menu();

printf("\n请选择你需要操作的步骤(0--7):

");

fflush(stdin);//清空在此前输入缓冲区

scanf("%d",&n);

if(n>=0&&n<=7)

{

flag=1;break;

}

else

{

flag=0;

system("cls");

printf("您输入有误,请重新选择!

\n");

}

}

while(flag==0);

while(flag==1)

{

switch(n)

{

case1:

initsq_L(L);break;/*表初始化*/

case2:

jianbiao(L);break;/*建表*/

case3:

Insertsq_L(L,i,e);break;/*插入*/

case4:

deletesq_L(L,i);break;/*删除*/

case5:

search_L(L,e);break;/*查找*/

case6:

modify_L(L,e1,e2);break;/*修改*/

case7:

printsq_L(L);break;/*打印*/

case0:

free(L);exit(0);break;

default:

system("cls");gotostart;

}

printf("\n是否继续进行(yorn):

");

fflush(stdin);//清空在此前输入缓冲区

a=getchar();

if(a=='y'||a=='Y')

{

flag=1;

system("cls");/*清屏*/

Menu();/*调用菜单函数*/

printf("请再次选择你需要操作的步骤(0--7):

");

fflush(stdin);//清空在此前输入缓冲区

scanf("%d",&n);

}

else

{

free(L);//释放顺序表

exit(0);

}

}

}

实验结果:

1.表初始化:

2.建表:

注:

若以空格键隔开数据,多输入无影响,计算机读取完指定数目数据后,自动结束读取。

3-1.插入位置合法:

3-2.插入位置不合法:

4.删除:

5-1.查找成功:

5-2.查找-没有相应数据:

6-1.找到修改元素,并确定修改:

6-2.找到修改元素,不修改:

6-3.没找到修改元素:

问题讨论:

1.元素插入及删除过程中,计算机储存结构中元素位置从0开始,但面向用户时,应考虑人的自然思维,即面向用户时应以1为第一个元素位置,计算机实现需要把位置i=i+1.

注:

文件名为:

学号+(次数)

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

当前位置:首页 > IT计算机 > 计算机软件及应用

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

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