我用顺序表写了一个菜单(C语言)

哈喽!!!大家好,这里是禾子日月

欢迎各位小伙伴️关注️点赞️留言️收藏

我坚信努力奔跑才能与幸运不期而遇。

最近学习了顺序表,想再巩固一遍,所以我用顺序表尝试写了一个菜单。

我用顺序表写了一个菜单(C语言)_第1张图片

首先我们来了解一下这个菜单的功能:

1、头插 2、头删

3、尾插 4、尾删

5、打印 -1、退出

以上就是我们今天要写的菜单的全部功能,现在我们可以试着写一下。

我用顺序表写了一个菜单(C语言)_第2张图片

 相信你一定可以写出来,如果写不出来也没有关系,请接着往下看。

#include
#include
#include

typedef int SLDataType;
typedef struct SeqList
{
	SLDataType *a;
	int size;
	int capacity;
}SL;
//顺序表初始化
void SeqListInit(SL *ps)
{
	ps->a = NULL;
	ps->size = ps->capacity =0;
}
//内存检查
void SLCheckCapacity(SL *ps)
{
	if(ps->size ==ps->capacity )
	{
		int NewCapacity;
		NewCapacity= ps->capacity== 0 ? 4 : ps->capacity*2;
		SLDataType *tmp=(SLDataType *)realloc(ps->a ,NewCapacity*sizeof(SLDataType));
		if(tmp==0)
		{
			printf("realloc fail\n");
			exit(-1);
		}
		ps->a = tmp;
		ps->capacity = NewCapacity;
	}
}
//尾插 
void SeqListPushBack(SL *ps,int x)
{
	SLCheckCapacity(ps);
	ps->a[ps->size]=x;
	ps->size++;
}
//头插
void SeqListPushFront(SL *ps,int x)
{
	SLCheckCapacity(ps);
	int end=ps->size-1;
	while(end>=0)
	{
		ps->a[end+1]=ps->a[end];
		end--;
	}
	ps->a[0]=x;
	ps->size++;
}
//尾删
void SeqListPopBack(SL *ps)
{	
	if(ps->size >0)
	{
		ps->size--;
	}
}
//头删
void SeqListPopFront(SL *ps)
{
	int begin=1;
	while(beginsize)
	{
		ps->a[begin-1]=ps->a[begin];
		begin++;
	}
	ps->size--;
 }
void SeqListDestory(SL *ps)//销毁内存 
{
	free(ps->a);
	ps->a ==NULL;
	ps->capacity = ps->size =0;
}
//打印顺序表
void SeqListPrint(SL *ps)
{
	for(int i=0;isize;i++)
	{
		printf("%d ",ps->a[i]);	
	}	
}
//菜单
void Menu()
{
	printf("_______________________________\n");
	printf("请选择你的操作:\n");
	printf("1、头插  2、头删\n");
	printf("3、尾插  4、尾删\n");
	printf("5、打印  -1、退出\n");
	
	printf("_______________________________\n");
}
void MenuTest()
{
	SL sl;
	SeqListInit(&sl);
	int input = 0;
	int x;
	while (input !=-1)
	{
		Menu();
		scanf("%d",&input);
		switch(input)
		{
			case 1:
				printf("请输入你要插入的数据,以-1结束:\n");
				scanf("%d",&x);
				while(x!=-1)
				{
					SeqListPushFront(&sl,x);
					scanf("%d",&x);
				}
				break;
			case 2:
				SeqListPopFront(&sl);
				break;
			case 3:
				printf("请输入你要插入的数据,以-1结束:\n");
				scanf("%d",&x);
				while(x!=-1)
				{
					SeqListPushBack(&sl,x);
					scanf("%d",&x);
				}
				break;
			case 4:
				SeqListPopBack(&sl);
				break;
			case 5:
				SeqListPrint(&sl);
				printf("\n");
				break;
			default:
				printf("无此选项,请重新输入\n");
				break;
		}
	}
	SeqListDestory(&sl);
}
int main()
{
	MenuTest();
	return 0;
}

写在最后

以上就是本篇文章全部内容,作者知识水平有限,若有什么错误或者需改进之处希望大家指出,若是你有更好的代码希望能给博主留言,博主希望能在CSDN与各位一起进步,感谢大家观看!

你可能感兴趣的