欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-04 15:25:09
目录代码内容包括:1.表的创建2.增删改查插3.界面跳转代码实现如下:#include #include#define maxsize 2...

代码内容包括:

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

总结

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

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!