线性表的小应用

在这里插入图片描述

#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++;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值