• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wchenfeng

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

顺序栈的表示与实现

顺序栈的基本函数

初始化

入栈

出栈

取栈顶元素

需要注意的是,本文代码采用了c++的一些语法,得使用cpp文件,才能运行成功。

代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define maxsize 100
typedef int status;//使后面可以使用status类型,用来表示成功或失败状态
#define ERROR -1
#define OK 1
typedef struct
{
	char *base;
	char *top;
	int stacksize;
}sqstack;

status init(sqstack &S)
{//顺序栈的初始化
	S.base=new char[10];
	if(!S.base) exit(OVERFLOW);
	S.top=S.base;
	S.stacksize=maxsize;
	return OK;
}

status push(sqstack &S,char e)//顺序栈入栈
{//插入元素e为新的栈顶元素
	if(S.top-S.base==S.stacksize) return ERROR;
	*S.top++=e; return OK;
}

status pop(sqstack &S,char &e)//顺序栈出栈
{//删除S的栈顶元素,用e返回其值
	if(S.top==S.base) return ERROR;
	e=*--S.top;
	return OK;
}

char gettop(sqstack S)//取栈顶元素
{//返回S的栈顶元素,不修改栈顶指针
	if(S.top!=S.base)
		return *(S.top-1);
}

//status StackTraverse(sqstack S)
//{
 从栈顶到栈底依次输出栈中的每个元素
//	char *p,*q ;
//	p =S.top;
//    q = S.base;
//	if(p==q)printf("The Stack is Empty!");//判断栈是否为空
//	else
//	{
//		printf("The Stack is: ");
//		p--;
//		while(p>=S.base)            
//		{
//			printf("%c ", *p);
//			p--;               
//		}
//	}
//	printf("\n");
//	return OK;
//}
status StackTraverse(sqstack S)
{
// 从栈顶到栈底依次输出栈中的每个元素
	if(S.top==S.base)printf("The Stack is Empty!");//判断栈是否为空
	else
	{
		printf("The Stack is: ");
		S.top--;
		while(S.top>=S.base)            
		{
			printf("%c ", *S.top);
			S.top--;               
		}
	}
	printf("\n");
	return OK;
}

void choose()
{
	printf("命令展示\n");
	printf("1:展示栈顶元素\n");
	printf("2:插入新元素\n");
	printf("3:删除栈顶元素\n");
	printf("4:展示栈元素\n");
	printf("5:退出\n");
}

void order(sqstack S)
{
	int n;char e;
	choose();
	printf("请问你想选择的功能\n");
	scanf("%d",&n);
	switch(n)
	{
	case 1: e=gettop(S);printf("栈顶元素是:%c\n",e);order(S);break;
	case 2: {
		printf("请输入你要插入的元素:\n");
		scanf("%s",&e);
		push(S,e);order(S);break;
			}
	case 3: {
		printf("返回的被删除栈顶元素:");
		pop(S,e);printf("%c\n",e);
		order(S);break;
			}
	case 4:StackTraverse(S);order(S);break;
	case 5: exit(0);break;
	default:exit(0);
	}
}

int main()
{
	sqstack S;
	init(S);
	push(S,'a');push(S,'b');push(S,'c');push(S,'d');push(S,'e');
	order(S);
	return 0;
}

代码当中的StackTtraverse()有2种写法,均可以使用。

输出

 输入

2
s
2
g
4

posted on 2022-04-12 20:02  王陈锋  阅读(76)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3