#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define List_c 100
#define List_j 10
typedef struct
{
int *elem;//地址
int length;//长度
int listsize;//容量
} SqList;
void display();//主屏菜单
int start(SqList &L);//初始化线性表
int Delet(SqList &L); //删除线性表
int Clear(SqList &L);//清除线性表
void Zhao_num(int Z_num,SqList &L); //找某个元素
void Qiao_num(int Z_num,SqList &L); //求前驱
void Hou_num(int Z_num,SqList &L);//求后驱
void Cha_num(int Z_num,int S_num,SqList &L);//插入指定位置元素
void Shan_num(int Z_num,SqList &L);//删除元素
void DisPlay(SqList &L);//显示线性表
void HeBing();//两个线性表合并的概念用数组实现
int main()
{
int num,T_0=0,T_2=0;
int Z_num=0,S_num=0;
SqList L;
L.elem=NULL;
bool k=true;
while(k)
{
display();
scanf("%d",&num);
switch(num)
{
case 1:
T_0=start(L);
if(T_0==1)
printf("分配成功\n%d",&L);
else
printf("分配不成功\n");
break;
case 2:
if(T_0==1)
{
T_0=Delet(L);
if(T_0==0)
{
printf("销毁成功\n");
}
else
printf("销毁不成功\n");
}
else
printf("没有初始化\n");
break;
case 3:
if(T_0==1)
{
T_2=Clear(L);
if(T_2==1)
{
printf("清空成功\n");
}
else
printf("清空不成功\n");
}
else
printf("清空没进行\n");
break;
case 4:
if(L.elem!=NULL)
printf("线性表不为空\n");
else
printf("线性表为空\n");
break;
case 5:
if(T_0==1)
{
printf("线性表的长度为%d\n",L.length);
}
else
printf("没有初始化线性表\n");
break;
case 6:
if(T_0==1)
{
printf("输入你要找位置的数字:");
Z_num=0;
scanf("%d",&Z_num);
printf("输入你要找%d位置的数字:%d",Z_num,L.elem[Z_num-1]);
}
else
printf("没有初始化线性表\n");
break;
case 7:
if(T_0==1)
{
printf("输入你要找的数字: ");
Z_num=0;
scanf("%d",&Z_num);
Zhao_num(Z_num,L);
}
else
printf("没有初始化线性表\n");
break;
case 8:
if(T_0==1)
{
printf("输入你要找的前驱数字: ");
Z_num=0;
scanf("%d",&Z_num);
Qiao_num(Z_num,L);
}
else
printf("没有初始化线性表\n");
break;
case 9:
if(T_0==1)
{
printf("输入你要找的后驱数字: ");
Z_num=0;
scanf("%d",&Z_num);
Hou_num(Z_num,L);
}
else
printf("没有初始化线性表\n");
break;
case 10:
if(T_0==1)
{
printf("输入你要插入的位置和数字: ");
Z_num=0;
S_num=0;
scanf("%d %d",&Z_num,&S_num);
if(Z_num<=L.length+1&&Z_num>0)
Cha_num(Z_num,S_num,L);
else
printf("输入要插入的位置不合理!!");
}
else
printf("没有初始化线性表\n");
break;
case 11:
if(T_0==1)
{
printf("输入你要删除的位置");
Z_num=0;
S_num=0;
scanf("%d",&Z_num);
if(Z_num<=L.length&&Z_num>0)
Shan_num(Z_num,L);
else
printf("输入要删除的位置不合理!!");
}
else
printf("没有初始化线性表\n");
break;
case 12:
if(T_0==1)
{
DisPlay(L);
}
else
printf("没有初始化线性表\n");
break;
case 13:
HeBing();
break;
default:
if(num<0)
k=false;
else
{
k=true;
printf("你输入的数字有点大,重新输入\n");
}
}
system("PAUSE");
system("CLS");
}
return 0;
}
void display()
{
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("10.---在线性表指定位置插入元素\n");
printf("11.--删除线性表指定位置元素\n");
printf("12.--显示线性表\n");
printf("13.--合并两个非递减顺序表\n");
printf("\t退出,输入一个负数\n");
printf("请输入操作代码\n");
}
int start(SqList &L)
{
L.elem=(int*)malloc(List_c*sizeof(int));
if(!L.elem)
exit(0);
L.length=0;
L.listsize=List_c;
printf("初始完成输入数字(想输入直接输入数字,不想输入负数结束):\n");
scanf("%d",&L.elem[L.length]);
while(L.elem[L.length]>=0)
{
L.length++;
scanf("%d",&L.elem[L.length]);
}
return 1;
}
int Delet(SqList &L)
{
free(L.elem);
L.elem=NULL;
L.length=0;
L.listsize=0;
return 0;
}
int Clear(SqList &L)
{
L.length=0;
L.listsize=0;
return 1;
}
void Zhao_num(int Z_num,SqList &L)
{
int D_num=0;
while(Z_num!=L.elem[D_num]&&D_num<=L.length)
{
D_num++;
}
if(D_num>=L.length)
{
printf("输入的数不在线性表中\n");
}
else
{
printf("输入的数在线性表第%d个\n",D_num+1);
}
}
void Qiao_num(int Z_num,SqList &L)
{
int D_num=0;
while(Z_num!=L.elem[D_num]&&D_num<=L.length)
{
D_num++;
}
if(D_num>=L.length)
{
printf("输入的数不在线性表中\n");
}
else
{
printf("输入的数在线性表第%d个的前驱%d\n",D_num+1,L.elem[D_num-1]);
}
}
void Hou_num(int Z_num,SqList &L)
{
int D_num=0;
while(Z_num!=L.elem[D_num]&&D_num<=L.length)
{
D_num++;
}
if(D_num>=L.length)
{
printf("输入的数不在线性表中\n");
}
else
{
if(D_num+1>L.length)
printf("输入的数不在线性表中\n");
else
printf("输入的数在线性表第%d个的后驱%d\n",D_num+1,L.elem[D_num+1]);
}
}
void Cha_num(int Z_num,int S_num,SqList &L)
{
L.length+=1;
int D_num=0,K_num=0;
D_num=L.elem[Z_num-1];
L.elem[Z_num-1]=S_num;
while(Z_num<=L.length)
{
K_num=L.elem[Z_num];
L.elem[Z_num]=D_num;
D_num=K_num;
Z_num++;
}
}
void Shan_num(int Z_num,SqList &L)
{
L.length-=1;
int D_num=0,K_num=0;
while(Z_num<=L.length)
{
K_num=L.elem[Z_num];
L.elem[Z_num-1]=K_num;
Z_num++;
}
}
void DisPlay(SqList &L)
{
int D_num=0;
while(D_num<=L.length-1)
{
printf("%d\t",L.elem[D_num]);
D_num++;
}
}
void HeBing()
{
int L[3]={2,3,5};
int k[6]={1,4,6,7,8,9};
int J[9],num=0,num_1=0,num_2=0,num_z=0;
while(num<3)
{
for(num_1=num_2;num_1<6;num_1++)
{
if(L[num]>k[num_1])
{
J[num_z]=k[num_1];
num_z++;
num_2++;
continue;
}
J[num_z]=L[num];
num_z++;
break;
}
num++;
}
if(num_z<=8&&num<=2)
{
while(num<=2)
{
J[num_z]=L[num];
num++;
num_z++;
}
}
if(num_z<8&&num_1<=7)
{
while(num_1<=5)
{
J[num_z]=k[num_1];
num_1++;
num_z++;
}
}
num=0;
while(num<=num_z-1)
{
printf("%d\t",J[num]);
num++;
}
}
线性表的小应用
最新推荐文章于 2024-07-02 00:29:47 发布