#include<stdio.h>
#include<stdlib.h>
#define length 100
#define addlength 10
typedef struct
{
int *eum;
int legth;
int size;
}List;
void Initlist(List &L,int n)
{
//初始化链表
int i;
L.eum = (int *)malloc(length * sizeof(int));//动态开辟内存
if(!L.eum)
exit(0);//判断是否开辟成功
L.size=length;
for(i=0;i<n;i++)
scanf("%d",&L.eum[i]);//输入链表中的数据
L.legth=n;
printf("the List has created succeed!\n");
}
void display(List L)
{
//输出链表
int j;
for(j=0;j<L.legth;j++)
printf("%d ",L.eum[j]);
putchar('\n');
}
void Delate(List & L,int i,int &e//将实参引用进来然后记录)
{
//删除链表中的某一个数据
e=L.eum[i-1];//记录
for(int j=i-1;j<L.legth;j++)
L.eum[j]=L.eum[j+1];//所有该位置后面的元素前移
L.legth--;//长度减一
}
void insertlist(List & L,int i,int e)
{
//插入元素
int j;
if(i<=0||i>L.legth+1)
{
printf("the location is wrong!");
exit(0);
}//判断是否插入位置正确
if(L.legth+1>L.size)
{
realloc(L.eum,L.legth+addlength);
L.size=L.legth+addlength;
}//插入如果超出链表范围 ,动态增加内存
for(j=L.legth;j>=i;j--)
{
L.eum[j] = L.eum[j-1];//所有元素后移 ,空出插入位置。
}
L.eum[i-1]=e;//插入
L.legth++;//长度增加
printf("it has already inserted\n");
}
void sortlist(List & L)
{
//排序
int i,j,temp;
for(i=0;i<L.legth-1;i++)
{
for(j=i+1;j<L.legth;j++)
{
if(L.eum[i]<L.eum[j])
{
temp=L.eum[i];
L.eum[i]=L.eum[j];
L.eum[j]=temp;
}
}
}
}
void findlist1(List L,int i)
{
//查找某一位置上的元素
printf("the i_th is%d\n",L.eum[i-1]);
}
int findlist2(List L,int e)
{
//查找某一元素的位置
for(int j=0;j<L.legth;j++)
if(L.eum[j]==e)
{
printf("the %d is %d_th number\n",e,j+1);
return 1;
}
else
printf("can`t find the eum!\n");
return 0;
}
void distorylist(List &L)
{
//销毁链表
free(L.eum);
L.legth=0;
L.size=0;//范围置零
}
int main()
{
List L;
int n,i,e;
int x;
while(1)
{
printf(" 1、建立一个线性表\n");
printf(" 2、插入数据\n");
printf(" 3、删除数据\n");
printf(" 4、对数据排序\n");
printf(" 5、查找数据的位置\n");
printf(" 6、查找该位置的数据\n");
printf(" 7、显示数据\n");
printf(" 8、销毁线性表\n");
printf(" 9、退出\n");
printf("please in put the number of list\n");
scanf("%d",&x);
switch(x)
{
case 1:
printf("please input the number of data");
scanf("%d",&n);
Initlist(L,n);
break;
case 2:
printf("输入插入的数据和位置:");
scanf("%d %d",&e,&i);
insertlist(L,i,e);
break;
case 3:
printf("输入删除数据的位置:");
scanf("%d",&i);
Delate(L,i,e);
printf("删除的数据为%d\n",e);
break;
case 4:
sortlist(L);
break;
case 5:
printf("输入要查找第几个数据");
scanf("%d",&i);
findlist1(L,i);
case 6:
printf("输入要查找的数据:");
scanf("%d",&e);
findlist2(L,e);
if(i==0)
printf("未查找到。\n");
break;
case 7:
display(L);
break;
case 8:
printf("销毁数据\n");
distorylist(L);
break;
case 9:
return 0;
}
}
return 0;
}