栈的插入 删除

栈:只能在表尾进行插入和删除操作,也是线性表。栈元素先进后出,最先进栈的只能在栈底,栈的插入称为:进栈、入栈,删除称为:出栈或弹栈。

顺序栈:以数组0下标为栈底。top记录栈底元素在数组中的位置,是变化的,top<栈(数组)长度,top为0时栈有1个元素,top为-1时是空栈。


基于数组对栈进行插入 删除 显示:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 10
typedef struct 
{
	int data[N];//栈的元素
	int top; //数组的下标,表示栈顶下标
}srack;
//初始化栈
void initsrack(srack *s)
{
	s->top=-1;
}
//判断栈是否为空
void srackempty(srack *s)
{
	if (s->top==-1)
		printf("栈为空\n");
	else
		printf("栈不为空\n");
}
//删除栈顶元素
void pop(srack *s)
{
	int e;
	if (s->top==-1)
		printf("栈为空");
	else
	{
		e=s->data[s->top];
		s->top--;
		printf("删除元素%d后还剩%d个元素\n",e,s->top+1);
	}
}
//入栈
void push(srack *s)
{
	if (N-s->top==1)//栈满
	{
		printf("栈已满\n");
	}
	else
	{
		printf("输入进栈的值:");
		scanf("%d",&s->data[++s->top]);
		printf("入栈成功\n");
	}
}
void print()
{
	printf("输入口令:\n");
	printf("1.判断栈是否为空\n");
    printf("2.入栈\n");
	printf("3.显示栈元素个数以及栈顶元素\n");
	printf("4.删除栈顶元素\n");
	printf("5.退出\n\n\n");
}
void display(srack *s)
{
	if (s->top==-1)
		printf("栈为空");
	else
	printf("此时栈有%d个元素,栈顶元素为%d\n",s->top+1,s->data[s->top]);
}
int main()
{
	print();//显示菜单
	int n;//口令变量
	int c=1;
	srack *s;
	s=(srack*)malloc(sizeof(srack));
	initsrack(s);//初始化栈

    while (c)
	{
	printf("\n输入操作口令:\n");
    scanf("%d",&n);	
	system("cls");//清屏  
	print();

	switch(n)
	{
	case 1:srackempty(s);break;//判断栈是否为空
	case 2:push(s);break;//入栈
    case 3:display(s);break;//显示
	case 4:pop(s);break;//出栈
    case 5:c=0;
	}
	}
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值