数据结构实验作业
实验1:顺序表的建立及运算
要求:
1、建立一个顺序表,输入n个元素并输出;
2、查找线性表中的最大元素并输出;
3、在线性表的第i个元素前插入一个正整数x;
4、删除线性表中的第j个元素;
5、将线性表中的元素按升序排列;
*6、将线性表中的元素就地逆序(只允许用一个暂存单元);
## 下面是代码(又长又难看~见谅)
#include<iostream>
#include<cstdio>
#define MAXN 100
using namespace std;
typedef struct
{
int len;//长度;
int idx[MAXN];//元素;
}SqList;
int n,maxn,ii,x,j;
void init(SqList &L)//初始化;
{
for(int i = 0; i < MAXN; i ++)
L.idx[i]=0;
L.len=0;
}
int creatlist(SqList &L,int n)//建立一个线性表并输出;
{
//建立;
printf("Please enter the number of elements:\n");
scanf("%d",&n);
if(n <= 0||n > MAXN)
{
printf("Transboundary\n");
return 0;
}
printf("Please enter the elements:\n");
for(int i = 0; i < n; i ++)
{
scanf("%d",&L.idx[i]);
++L.len;
}
//输出;
for(int i = 0; i < L.len; i ++)
{
printf("%d ",L.idx[i]);
}
printf("\n");
return 0;
}
int find_maxlist(SqList L,int maxn)//寻找线性表中的最大值并输出;
{
maxn=0;
if(!L.len)
{
printf("Non-existent\n");
return 0;
}
for(int i = 0; i < L.len; i ++)
{
if(L.idx[i]>maxn)
maxn=L.idx[i];
}
printf("The largest element in the linear table is:\n");
printf("%d\n",maxn);
return 0;
}
int list_inerst(SqList L,int ii,int x)//在第ii元素前插入X;
{
printf("Please enter the insertion position and value:\n");
scanf("%d%d",&ii,&x);
if((ii<1)||(ii>L.len+1))
{
cout<<L.len<<endl;
printf("Transboundary\n");
return 0;
}
for(int i = L.len-1;i >= ii-1; i --)
{
L.idx[i+1]=L.idx[i];
}
L.idx[ii-1]=x;
++L.len;
printf("The linear table after inserting is as follow:\n");
for(int i = 0; i < L.len; i ++)
{
printf("%d ",L.idx[i]);
}
printf("\n");
return 0;
}
int list_delets(SqList L,int j)//删除第j个元素;
{
printf("Enter the position of the element to delete:\n");
scanf("%d", &j);
if((j<1)||j>L.len)
{
printf("Transboundary\n");
return 0;
}
for(int i = j; i < L.len-1; i ++)
{
L.idx[i]=L.idx[i+1];
}
--L.len;
printf("The linear table after inserting is as follow:\n");
for(int i = 0; i < L.len; i ++)
printf("%d ",L.idx[i]);
printf("\n");
return 0;
}
int sortlist(SqList L)//将线性表升序排序并输出;
{
if(!L.len)
{
printf("Transboundary\n");
return 0;
}
for(int i = 0; i < L.len-1; i ++)
{
int k=i,temp;
for(int j =i+1; j < L.len; j ++)
{
if(L.idx[k]>L.idx[j])
k=j;
}
if(k!=i)
{
temp=L.idx[i];
L.idx[i]=L.idx[k];
L.idx[k]=temp;
}
}
printf("The linear table after ascending is as follow:\n");
for(int i = 0; i < L.len; i ++)
printf("%d ",L.idx[i]);
printf("\n");
return 0;
}
int reverselist(SqList L)//将线性表中的元素就地逆序(只允许用一个暂存单元)
{
if(!L.len)
{
printf("Transboundary\n");
return 0;
}
int temp,k;
for(int i = 0; i < L.len/2; i ++)
{
k=L.len-i-1;
temp=L.idx[i];
L.idx[i]=L.idx[k];
L.idx[k]=temp;
}
printf("The linear table after ascending is as follow:\n");
for(int i = 0; i < L.len; i ++)
printf("%d ",L.idx[i]);
printf("\n");
return 0;
}
int main()
{
SqList L;
init(L);
creatlist(L,n);
find_maxlist(L,maxn);
list_inerst(L,ii,x);
list_delets(L,j);
sortlist(L);
reverselist(L);
return 0;
}
下面就是运行结果啦~
欧克~又是水水的一篇