当前位置:主页 > 软件编程 > C代码 >

C语言代码详细描述顺序线性表

时间:2022-10-03 11:31:54 | 栏目:C代码 | 点击:

代码内容包括:

1.表的创建

2.增删改查插

3.界面跳转

代码实现如下:

#include <stdio.h>
#include<stdlib.h>
#define MaxSize 20
typedef int ElemType;//将int类型赋予别名
//创建结构体
typedef struct{
ElemType A[MaxSize];//MaxSize是给表的一个预估容量
int n;//n是指当前A的元素个数,记录当下表的大小
}seqList,*pSeqList;//给结构体赋予名字以及创建一个结构体类型的指针

//函数声明
void ADD(pSeqList L);
void Delete(pSeqList L);
void Insert(pSeqList L);
void welcome(pSeqList L);
void Correct(pSeqList L);
void search(pSeqList L);
void view(pSeqList L);
//表的创建
pSeqList CREATE(){
pSeqList L;
L=(pSeqList)malloc(sizeof(seqList));
if(L==NULL){
printf("Failure\n");//判断创建是否成功
return 0;
}
else{
printf("success!");
L->n=0;
}
return L;
}
//主函数
int main(){
pSeqList head;
head=CREATE();
welcome(head);
system("pause");
return 0;
}
//增添元素
void ADD(pSeqList L){
	system("cls");
	int k;
	for(k=0;k<L->n;k++){
	printf("第%d个元素:%d\n",k+1,L->A[k]);
	}
	int adder;
	int choose=0;
	do{
	if(L->n==MaxSize){
	printf("表已满,无法添加!\n");
	}
	else{
	printf("添加元素:");
    scanf("%d",&adder);
	L->A[L->n]=adder;
	L->n++;
	printf("已成功添加:%d 添加后元素个数为:%d\n\n",L->A[(L->n)-1],L->n);
	}
printf("是否继续添加?\n1、继续添加   2、返回主界面\n");
scanf("%d",&choose);
system("cls");//表示将当前页面清空
}while(choose==1);
	if(choose==2){
	welcome(L);}
	else welcome(L);
}
//删除
void Delete(pSeqList L){
	int j;
	int k;
	int i;
	int choose=0;
	for(k=0;k<L->n;k++){
	printf("第%d个元素:%d\n",k+1,L->A[k]);
	}
	do{
	system("cls");
	printf("删除界面\n");
	for(k=0;k<L->n;k++){
	printf("第%d个元素:%d\n",k+1,L->A[k]);
	}
	if(L->n==NULL){
	printf("表为空!");
	break;
	}
	printf("请输入你要删除第几个元素:");
	scanf("%d",&i);
	if(i<1||i>L->n){
	printf("\n删除的数据位置有误!\n");
	}
	else{
		for(j=i;j<=L->n-1;j++)
		    L->A[j-1]=L->A[j];
		L->n--;
		printf("删除成功!\n");
	}
	printf("删除后的元素为:\n");
	for(k=0;k<L->n;k++){
	printf("第%d个元素:%d\n",k+1,L->A[k]);
	}
	printf("是否继续删除?\n1.继续删除  2.返回主界面\n");
	scanf("%d",&choose);
}while(choose==1);
	if(choose==2){
	welcome(L);}
	else welcome(L);
}
//插入元素
void Insert(pSeqList L){
int i;
int item;
int j;
int choose=0;
int choosex;
int k;
system("cls");
if(L->n==NULL){
			printf("\n\n\n元素为空!是否添加元素?1.是  2.返回主菜单");
			scanf("%d",&choosex);
			if(choosex==1)
			{
				ADD(L);
			}
			else welcome(L);
		}
for(k=0;k<L->n;k++){
	printf("第%d个元素:%d\n",k+1,L->A[k]);
	}
do{
printf("插入元素\n");
if(L->n==MaxSize){
printf("表满!\n");
break;
}
printf("请输入你想插入的位置:");
scanf("%d",&i);
system("cls");
if(i<1||i>L->n+1){
printf("\n插入位置错误!\n");
}
printf("请输入你想插入的数据:");
scanf("%d",&item);
for(j=L->n-1;j>i-2;j--)
		L->A[j+1]=L->A[j];
L->A[i-1]=item;
L->n++;
printf("插入成功!插入后的数据为;\n");
for(k=0;k<L->n;k++){
	printf("第%d个元素:%d\n",k+1,L->A[k]);
	}
printf("\n是否继续插入?\n1.继续插入  2.返回主界面");
scanf("%d",&choose);
}while(choose==1);
	if(choose==2){
	welcome(L);}
	else welcome(L);
}
//修改元素
void Correct(pSeqList L){
	int cn;
	int item;
	int k;
	int choose;
		system("cls");
		if(L->n==NULL){
			printf("\n\n\n元素为空!是否添加元素?1.是  2.返回主菜单");
			scanf("%d",&choose);
			if(choose==1)
			{
				ADD(L);
			}
			else welcome(L);
		}
		//*******************************************
	   for(k=0;k<L->n;k++)
	  {
     	printf("第%d个元素:%d\n",k+1,L->A[k]);
       }
	   //********************************************
	   do{
	      printf("请输入你要修改的元素序号:");
	      scanf("%d",&cn);
	      if(cn<1||cn>L->n){
			  printf("输入错误请重新输入:");
		  }
	   }while(cn<1||cn>L->n);
	printf("\n请输入你想修改成的数据:");
	scanf("%d",&item);
	L->A[cn-1]=item;
	system("cls");
	printf("修改后的数据为:\n");
	for(k=0;k<L->n;k++)
	{
	printf("第%d个元素:%d\n",k+1,L->A[k]);
	}
	printf("是否继续修改?1.是  2.返回主菜单");
	scanf("%d",&choose);
	if(choose==1){
	Correct(L);
	}
	else welcome(L);
}
//查找元素
void search(pSeqList L){
	int mchoose;
	int choose;
	int choose1;
	int choose2;
	int num;
	int item;
	int i;
	int j=0;
	system("cls");
	if(L->n==NULL){
			printf("\n\n\n元素为空!是否添加元素?1.是  2.返回主菜单");
			scanf("%d",&choose);
			if(choose==1)
			{
				ADD(L);
			}
			else welcome(L);
		}
	printf("*****查找方式选择*****\n\n1.输入序号以寻找对应数据\n2.输入数据找到对应的序号\n3.返回主菜单\n");
	scanf("%d",&mchoose);
	system("cls");
	if(mchoose==3){
	welcome(L);
	}
	if(mchoose==1)
	{
		do
		{
	     printf("请输入序号:");
	     scanf("%d",&num);
	     printf("序号:%d 数据:%d\n",num,L->A[num-1]);
	     printf("1.继续输入  2.返回上一级");
		 scanf("%d",&choose2);
	    }while(choose2==1);
	   if(choose2!=1)
	   {
	   search(L);
	   }
	}
	else if(mchoose==2)
	{
		do
	   {
		printf("请输入数据:");
	    scanf("%d",&item);
		for(i=0;i<L->n;i++)
		{
			if(item==L->A[i])
			{
			printf("元素:%d  序号:%d\n",i+1,item);j=1;
			}
		}
		if(j==0){printf("您输入的元素不存在!");}
        printf("1.继续输入  2.返回上一级");
		scanf("%d",&choose1);
	    }while(choose1==1);
	   if(choose1!=1){
	   search(L);
	   }
	}
	else 
	{
       search(L);
	}
}
//浏览全部元素
void view(pSeqList L)
{
	int k;
	char choose[10];
	int choosey;
	if(L->n==NULL)
	  {
			printf("\n\n\n元素为空!是否添加元素?1.是  2.返回主菜单");
			scanf("%d",&choosey);
			if(choosey==1)
			{
				ADD(L);
			}
			else welcome(L);
		}
	for(k=0;k<L->n;k++)
	  {
     	printf("第%d个元素:%d\n",k+1,L->A[k]);
       }
	printf("输入任意字符以返回菜单");
	scanf("%s",choose);
	getchar();
	if(choose!=NULL)
	{
		welcome(L);
	}
}
//欢迎界面
void welcome(pSeqList L){
	pSeqList head;
	head=L;
	int welchoose=0;
	system("cls");
printf("\t\t\t\***************************************\n");
printf("\t\t\t\t\t顺序表功能选择\n");
printf("\t\t\t\t\t1.添加元素\n");
printf("\t\t\t\t\t2.删除元素\n");
printf("\t\t\t\t\t3.插入元素\n");
printf("\t\t\t\t\t4.修改元素\n");
printf("\t\t\t\t\t5.查找元素\n");
printf("\t\t\t\t\t6.浏览元素\n");
printf("\t\t\t\***************************************\n");
scanf("%d",&welchoose);
switch(welchoose){
case 1:ADD(head);break;
case 2:Delete(head);break;
case 3:Insert(head);break;
case 4:Correct(head);break;
case 5:search(head);break;
case 6:view(head);break;
default :printf("输入错误!");main();break;
}
}

总结

以上为线性顺序表的基本操作,若发现错误,敬请各位读者指正!

您可能感兴趣的文章:

相关文章