赞
踩
(1)领会线性表顺序存储结构的特点。
(2)掌握线性表顺序存储结构的常见算法。
(1)建立顺序表存储数据序列(10,20,30,40,50,60,70,80,90,100)
(2)输出顺序表中的所有元素;
(3)输出顺序表中的最大值和最小值;
(4)键盘输入一个数x,如x在表中返回其在表中的位序,不在返回相应提示信息。
(5)删除顺序表中的第8个元素,并输出顺序表中的所有元素;
(6)在第5个元素后面插入新元素55,并输出顺序表中的所有元素;
(7)输出顺序表的长度。
(1)输入线性表的元素个数,然后构建一个新的线性表;
(2)连续用insertlist函数往性表里插入元素,将其元素输出;
(3)利用冒泡法查找最大值和最小值;
(4)while循环查找第一个值域与x相等的元素的逻辑序号;
(5)删除:将第i个以后的元素均向前移动一个位置,并从元素a(i+1)开始移动起。
(6)插入:第i个元素及以后的元素均后移一个位置,并且从最后一个元素a(i+1)开始移动起。
#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;
}
(1)错误:重复定义了i——在同一个作用域内进行了两次或两次以上的赋值,编译器无法判断使用哪个。
解决措施:将int i注释掉。
(2)报错:expected ‘;’, ‘,’ or ‘)’ before ‘&’ token
解决方法:通过百度我发现是因为我的源代码文件后缀.c,因为“&”引用符号是C++中的内容,改为.cpp后不再报错。
这次实验让我真正的明白了SqList &L的使用:在函数调用中引用变量一定要初始化才可以使用。"&"在这里是引用符号,作用是:需要把子函数中的运算结果传回主函数。
这次实验加深了我对刚学过的数据结构的基础知识理解,更深刻的理解了线性结构的特点。
对于线性表在顺序存储结构上实现基本操作的算法如查找,插入,删除等也理解得更透彻了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。