比昨天写的有所改进。开心.jpg
#include<stdio.h>
#include<malloc.h>
#define maxSize 10
//typedef int ElemType
typedef struct Sqlist
{
int data[maxSize];
int length;
}Sqlist;
//插入函数
bool ListInsert(Sqlist &L,int i,int e ) //将元素e插入到顺序表L的第i个位置,因为顺序表是从第1个位置开始算起的,而数组是0开始,即第i个位置是a[i-1]
{
if(i<1||i>L.length+1||i>maxSize)//加一是可以插入到顺序表的尾部
return false;
for(int j=L.length;j>=i;j--)//j=i是指从i的包括i的元素往后移
L.data[j]=L.data[j-1];
L.data[i-1]=e;
++L.length;
printf("长度%d\n",L.length);
return true;
}
//删除函数
bool ListDelete(Sqlist &L,int i,int e)//删除顺序表L中的第i个元素,成功返回true,将删除的元素用e返回,否则false
{
if(i<1||i>L.length||i>maxSize)//非法操作
return false;
e=L.data[i-1];
for(int j=i;j<L.length;j++)
L.data[i-1]=L.data[i];
L.length--;
return true;
}
//根据所查找的元素是否在顺序表中,并且返回对应的数组下标
int findIDByELem(Sqlist &L,int e)
{
for(int i=0;i<L.length;i++)
{
if(L.data[i]==e)
return i;
}
return -1;//返回-1代表没找到
}
//输出顺序表
int display(Sqlist &L){
for(int i=0;i<L.length;i++)
{
printf("第%d的元素为:%d\n",i+1,L.data[i]);
}
}
/**
删除最小元素的值,并且返回其值
*/
int deleteMinElem(Sqlist &L)
{
int min=L.data[0];//先设置最小的元素为首元素
int locateElem;
if(L.length<0)
return 0;
for(int i=0;i<L.length;i++)
{
if(min>L.data[i])
min=L.data[i];
locateElem=i;
}
ListDelete(L,locateElem,min);
return locateElem;
}
/*逆置函数
例如1
1 12 35 38 12 29 41
41 29 12 38 35 12 1*/
void reverseELem (Sqlist &L)
{
int i;
int j=L.length-1;
int temp=0;
for(i=0;i<=j;i++,j--)
{
temp=L.data[i];
L.data[i] =L.data[j];
L.data[j]=temp;
}
}
int main()
{
Sqlist L;
int n;
printf("顺序表要输入的个数:");
scanf("%d",&n);
printf("\n");
L.length=n;
for(int i=0;i<n;i++){
printf("输入第%d个元素:",i+1);
scanf("%d",&L.data[i]);
}
printf("之前的元素:\n");
display(L);
printf("删除元素支后\n");
ListDelete(L,2,21);
display(L);
printf("逆置函数之后\n") ;
reverseELem(L) ;
display(L);
printf("插入元素\n");//插入周有元素
ListInsert(L,3,20);
display(L);
return 0;
}