数据结构——栈的基本操作(顺序栈)

在这里插入图片描述

#include<stdio.h>
#include <stdlib.h>
#define Stack_Size 50
#define TRUE 1
#define FALSE 0
typedef char StackElementType;

typedef struct
{
	StackElementType elem[Stack_Size];  //存放栈中元素的一维数组
	int top;  //存放栈顶元素下标 -1表示空栈
}SeqStack;

//初始化
void InitStack(SeqStack * S)
{
	S->top=-1;
}

//进栈
int Push(SeqStack * S,StackElementType x)
{
	if(S->top==Stack_Size-1) return TRUE; //printf("栈已经满啦!")
	S->top++;
	S->elem[S->top]=x;
	return FALSE;  //printf("成功入栈!\n")
}

//出栈
int Pop(SeqStack * S,StackElementType x)
{
	if(S->top==-1)
		return(FALSE);
	else
	{
		x=S->elem[S->top];
		S->top--;
		return (TRUE);
	}
}

//获取栈顶元素
int GetTop(SeqStack * S,StackElementType *x)
{
	if(S->top==-1)
		return(FALSE);
	else
	{
		*x=S->elem[S->top];
		S->top--;
		return (TRUE);
	}
}
void output(SeqStack * S)
{
	int i;
	printf("现在栈里面的元素有:");
	for(i=S->top;i>=0;i--)
	{
		printf("%c  ",S->elem[i]);
	}

}

void main ()
{
	SeqStack S,p;
	char q;
	int choose,cycle=1,i,e;
	InitStack (&S);
	printf("已初始化栈!\n");
	system("color 2F");
	while(cycle){
		printf("请输入要执行的操作:\n");
		printf("\t-----------------------------------------\n");
		printf("\t|\t1.    入栈   \t\t\t|\n");
		printf("\t-----------------------------------------\n");
		printf("\t|\t2.    出栈    \t\t\t|\n");
		printf("\t-----------------------------------------\n");
		printf("\t|\t3.    输出    \t\t\t|\n");
		printf("\t-----------------------------------------\n");
		printf("\t|\t4.    退出    \t\t\t|\n");
		printf("\t-----------------------------------------\n");
		//choose =getch();
		scanf("%d",&choose);
		switch (choose)
		{
		case 1://入栈
				printf("请输入入栈个数:");
				scanf("%d",&e);
				printf("请输入入栈元素:");
				for(i=0;i<=e;i++)
					{
						scanf("%c,",&q);
						Push (&S,q);
					}
				output(&S);
				system("pause");
			break;
		case 2://出栈
			Pop(&S,q);
			printf("出栈啦:");
			output(&S);
			system("pause");
			break;
		case 3://输出栈元素
			output(&S);
			system("pause");
			break;
		case 4:
			cycle=0;
			printf("RZH欢迎您再次使用:\n");
			break;
		default	:
			printf("输入有误,欢迎您再次使用:\n");
			cycle=0;

		}
	}
}
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值