数据结构实验报告:顺序表基本操作的实现

1、实验目的

(1)领会线性表顺序存储结构的特点。

(2)掌握线性表顺序存储结构的常见算法。

2、实验具体要求

1建立顺序表存储数据序列(10,20,30,40,50,60,70,80,90,100)

2)输出顺序表中的所有元素;

3)输出顺序表中的最大值和最小值;

4)键盘输入一个数x,如x在表中返回其在表中的位序,不在返回相应提示信息。

5)删除顺序表中的第8个元素,并输出顺序表中的所有元素;

6)在第5个元素后面插入新元素55,并输出顺序表中的所有元素;

7)输出顺序表的长度。

3、实验设计思路(编程语言、模块划分及函数功能描述等)

(1)输入线性表的元素个数,然后构建一个新的线性表;
(2)连续用insertlist函数往性表里插入元素,将其元素输出;
(3)利用冒泡法查找最大值和最小值;

(4)while循环查找第一个值域与x相等的元素的逻辑序号;

(5)删除:将第i个以后的元素均向前移动一个位置,并从元素a(i+1)开始移动起。

(6)插入:第i个元素及以后的元素均后移一个位置,并且从最后一个元素a(i+1)开始移动起。

4、实验源程序、程序调试结果

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#include <string.h>

#define LEN 10

typedef struct

{ int data[LEN];

int length;

}Sqlist;  //定义Sqlist这个表结构

void showlist(Sqlist *L) //显示表内数据

{ int i;

if(L->length==0)     //表内为空

printf("该表为空");

else

{ printf("表内数据:\n");

for(i=0;i<L->length;i++)

printf("%d\n",L->data[i]);

printf("表内有%d个数据\n",L->length);

}

}

void initlist(Sqlist *&L)//初始化表结构,定义结构体指针L

{

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

L->length=0; //初始化节点数量

}

bool insertlist(Sqlist *&L,int i,int e)//插入数据

{

int j;

if(i>L->length+1||i<1)//隔空插入或逻辑序号错误

return false;

i--; //逻辑序号转换为物理序号

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

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

L->data[i]=e;

L->length++;

return true;

}

void Fmaxmin(Sqlist *L)//查找最大最小值

{

int max=L->data[0],min=L->data[0];

for(int i=0;i<L->length;i++)

{

if(L->data[i]>max)

max=L->data[i];

if(L->data[i]<min)

min=L->data[i];

}

printf("表中最大值为%d\n",max);

printf("表中最小值为%d\n",min);

}

int selectlist(Sqlist *L,int e)//按e(元素)查找下标返回下标(int)

{

int i=0;

while(i<L->length&&L->data[i]!=e)

i++;

if(i>=L->length)

return 0;

else

return i+1;

}

bool deletelist(Sqlist *&L,int i)//删除元素操作

{

int j;

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

return false;

i--;

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

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

L->length--;

printf("表内有%d个数据\n",L->length);

return true;

}

int main()

{

Sqlist *L;

int a[LEN]={10,20,30,40,50,60,70,80,90,100};

int e,i=0,flag=0;

initlist(L);

for(i=0;i<10;i++)

insertlist(L,i+1,a[i]);

//1

showlist(L);

//2

Fmaxmin(L);

//3

printf("请输入你要查找的数据\n");

scanf("%d",&e);

if(selectlist(L,e)==0)

printf("表中没有你要查找的数据\n");

else

printf("你要查找的数据是表中第%d个元素\n",selectlist(L,e));

//4

printf("您要删除第几个元素?\n");

scanf("%d",&i);

deletelist(L,i);

showlist(L);

//5

printf("您要插入在哪里插入新元素?\n");

scanf("%d",&i);

printf("您要插入什么元素?\n");

scanf("%d",&e);

insertlist(L,i+1,e);

showlist(L);

//6

printf("%d",L->length);

return 0;

}

 

5、程序调试过程中遇到的问题及解决办法

1)错误:重复定义了i——在同一个作用域内进行了两次或两次以上的赋值,编译器无法判断使用哪个。

解决措施:将int i注释掉。

(2)报错:expected ‘;’, ‘,’ or ‘)’ before ‘&’ token

解决方法:通过百度我发现是因为我的源代码文件后缀.c,因为“&”引用符号是C++中的内容,改为.cpp后不再报错。

6、实验收获与体会

这次实验让我真正的明白了SqList &L的使用:在函数调用中引用变量一定要初始化才可以使用。"&"在这里是引用符号,作用是:需要把子函数中的运算结果传回主函数。

这次实验加深了我对刚学过的数据结构的基础知识理解,更深刻的理解了线性结构的特点。

对于线性表在顺序存储结构上实现基本操作的算法如查找,插入,删除等也理解得更透彻了。

  • 3
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

提督街潜水的丸子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值