数据结构—顺序栈的操作及实现(CC++)

数据结构—顺序栈的操作及实现(C/C++)

1.0初始化定义

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100    //定义数组的最大长度
#define OK 1
#define OVERFLOW -1
#define ERROR -1
typedef int SElemType; // 自己定义的类型
typedef int status;  //  上同 

1.1顺序栈的定义

typedef struct
{
	SElemType* base;   //栈底指针
	SElemType* top;   //栈顶指针
	int stacksize;   //栈的最大容量
}sqstack;

1.2顺序栈的初始化

status Initstack(sqstack *S)
{
	S->base = (SElemType*)malloc(MAXSIZE*sizeof(SElemType)); //为顺序栈动态分配一块容量为MAXSIZE的空间
	if(!S->base)     //如果分配空间失败,返回-1
	{
		exit(OVERFLOW);
	}
	else
	{
		S->top = S->base; //栈顶指针初始化为栈底指针>>>空栈
	}
	S->stacksize = MAXSIZE; //栈的容量为MAXSIZE
	return OK;
}

1.3顺序栈的入栈

status Push(sqstack *S,SElemType e)
{
	if(S->top-S->base==S->stacksize) //判断顺序栈满条件
	{
		printf("顺序栈满了!");
		return ERROR;
	}
	else
	{
		*S->top = e; //圧入元素进栈
		S->top++; //栈顶指针向上移动
	}
	return OK;
}

1.4顺序栈的出栈

status Pop(sqstack *S,SElemType &e)
{
	if(S->top==S->base) //判断顺序栈栈空条件
	{
		return ERROR;
	}
	else
	{
		S->top--;        //指针先-1
		e = *S->top;    //然后赋值给e带回
		printf("%d\n",e);//这我直接打印弹出的元素
	}
	return OK;
}

1.5取顺序栈的栈顶元素

status GetTop(sqstack *S)
{
	if(S->top!=S->base)
	{
		return *(S->top - 1);
	}
	return OK;
}

1.6 C主函数代码:

int main() 
{
	int n,m,e;
	sqstack S;
	Initstack(&S);
	printf("请输入入栈元素的个数:");
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		printf("请输入第%d个入栈元素的值:",i);
		scanf("%d",&e);
		Push(&S,e);
	}
	printf("\n");
	printf("此时栈顶元素为:%d",GetTop(&S));
	printf("\n");
	printf("请输入出栈元素的个数:");
	scanf("%d",&m);
	printf("出栈元素顺序为:\n");
	for(int i=1;i<=m;i++)
	{
		Pop(&S,e);
	}
	printf("此时栈顶元素为:%d",GetTop(&S));
	return 0;
}

1.7 C++主函数代码:

int main() 
{
	int n,m,e;
	sqstack S;
	Initstack(&S);
	cout<<"请输入入栈元素的个数:";
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cout<<"请输入第"<<i<<"个入栈元素的值:";
		cin>>e;
		Push(&S,e);
	}
	cout<<endl;	
	cout<<"此时栈顶元素为:"<<GetTop(&S);
	cout<<endl;	
	cout<<"请输入出栈元素的个数:";
	cin>>m;
	cout<<"出栈元素顺序为:"<<endl; 
	for(int i=1;i<=m;i++)
	{
		Pop(&S,e);
	}
	cout<<"此时栈顶元素为:"<<GetTop(&S);
	return 0;
}

1.8 C 完整代码

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100    //定义数组的最大长度
#define OK 1
#define OVERFLOW -1
#define ERROR -1
typedef int SElemType; // 自己定义的类型
typedef int status;  //  上同 
//顺序栈的表示以及实现
typedef struct
{
	SElemType* base;   //栈底指针
	SElemType* top;   //栈顶指针
	int stacksize;   //栈的最大容量
}sqstack;

//顺序栈的初始化

status Initstack(sqstack *S)
{
	S->base = (SElemType*)malloc(MAXSIZE*sizeof(SElemType)); //为顺序栈动态分配一块容量为MAXSIZE的空间
	if(!S->base)     //如果分配空间失败,返回-1
	{
		exit(OVERFLOW);
	}
	else
	{
		S->top = S->base; //栈顶指针初始化为栈底指针>>>空栈
	}
	S->stacksize = MAXSIZE; //栈的容量为MAXSIZE
	return OK;
}
//入栈
status Push(sqstack *S,SElemType e)
{
	if(S->top-S->base==S->stacksize) //判断顺序栈满条件
	{
		printf("顺序栈满了!");
		return ERROR;
	}
	else
	{
		*S->top = e; //圧入元素进栈
		S->top++; //栈顶指针向上移动
	}
	return OK;
}
//顺序栈的出栈
status Pop(sqstack *S,SElemType &e)
{
	if(S->top==S->base) //判断顺序栈栈空条件
	{
		return ERROR;
	}
	else
	{
		S->top--;        //指针先-1
		e = *S->top;    //然后赋值给e带回
		printf("%d\n",e);//这我直接打印弹出的元素
	}
	return OK;
}
//取顺序栈顶元素
status GetTop(sqstack *S)
{
	if(S->top!=S->base)
	{
		return *(S->top - 1);
	}
	return OK;
}
//主函数
int main() 
{
	int n,m,e;
	sqstack S;
	Initstack(&S);
	printf("请输入入栈元素的个数:");
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		printf("请输入第%d个入栈元素的值:",i);
		scanf("%d",&e);
		Push(&S,e);
	}
	printf("\n");
	printf("此时栈顶元素为:%d",GetTop(&S));
	printf("\n");
	printf("请输入出栈元素的个数:");
	scanf("%d",&m);
	printf("出栈元素顺序为:\n");
	for(int i=1;i<=m;i++)
	{
		Pop(&S,e);
	}
	printf("此时栈顶元素为:%d",GetTop(&S));
	return 0;
}

1.9 C++完整代码

#include<iostream>
#define MAXSIZE 100    //定义数组的最大长度
#define OK 1
#define OVERFLOW -1
#define ERROR -1
using namespace std;
typedef int SElemType; // 自己定义的类型
typedef int status;  //  上同 

//顺序栈的表示以及实现
typedef struct
{
	SElemType* base;   //栈底指针
	SElemType* top;   //栈顶指针
	int stacksize;   //栈的最大容量
}sqstack;

//顺序栈的初始化

status Initstack(sqstack *S)
{
	S->base = new SElemType[MAXSIZE]; //为顺序栈动态分配一块容量为MAXSIZE的空间
	if(!S->base)     //如果分配空间失败,返回-1
	{
		exit(OVERFLOW);
	}
	else
	{
		S->top = S->base; //栈顶指针初始化为栈底指针>>>空栈
	}
	S->stacksize = MAXSIZE; //栈的容量为MAXSIZE
	return OK;
}
//入栈
status Push(sqstack *S,SElemType e)
{
	if(S->top-S->base==S->stacksize) //判断顺序栈满条件
	{
		cout<<"顺序栈满了!";
		return ERROR;
	}
	else
	{
		*S->top = e; //圧入元素进栈
		S->top++; //栈顶指针向上移动
	}
	return OK;
}
//顺序栈的出栈
status Pop(sqstack *S,SElemType &e)
{
	if(S->top==S->base) //判断顺序栈栈空条件
	{
		return ERROR;
	}
	else
	{
		S->top--;        //指针先-1
		e = *S->top;    //然后赋值给e带回
		cout<<e<<endl; //这我直接打印弹出的元素
	}
	return OK;
}
//取顺序栈顶元素
status GetTop(sqstack *S)
{
	if(S->top!=S->base)
	{
		return *(S->top - 1);
	}
	return OK;
}
//主函数
int main() 
{
	int n,m,e;
	sqstack S;
	Initstack(&S);
	cout<<"请输入入栈元素的个数:";
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cout<<"请输入第"<<i<<"个入栈元素的值:";
		cin>>e;
		Push(&S,e);
	}
	cout<<endl;	
	cout<<"此时栈顶元素为:"<<GetTop(&S);
	cout<<endl;	
	cout<<"请输入出栈元素的个数:";
	cin>>m;
	cout<<"出栈元素顺序为:"<<endl; 
	for(int i=1;i<=m;i++)
	{
		Pop(&S,e);
	}
	cout<<"此时栈顶元素为:"<<GetTop(&S);
	return 0;
}

2.0运行截图

在这里插入图片描述

2.1参考书籍

《数据结构》(C语言版)(第2版)—严蔚敏 李冬梅 吴伟民 编著

2.2总结

如果对你有帮助,点点关注,多评论交流指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值