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

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

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

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

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

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

1、头插 2、头删

3、尾插 4、尾删

5、打印 -1、退出

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

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

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

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(begin<ps->size)
	{
		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;i<ps->size;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与各位一起进步,感谢大家观看!

  • 69
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 85
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 85
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值