顺序栈的功能实现(初始化,判空,压栈,弹栈,打印栈顶元素,批量手动输入元素压栈弹栈) ——以c语言为例

顺序栈特点:FILO(先进后出)
计算顺序栈的长度方法:length=s.top-s.base;
时间复杂度:O(1)

#include <stdio.h>
 #include <iostream>
 using namespace std;
 
 #define sElemType  int     //预定义类型 
 #define STACK_INIT_SIZE 10 //预定义初始容量 
 //定义顺序栈的结构体 
 typedef struct sqStack{
 	sElemType *top;//栈顶指针(指向栈顶元素的下一个元素的地址) 
 	sElemType *base;//保存顺序栈的数组的首地址,也就是数组的名字(作用:判空) 
 	int size;//容量

 };
 //初始化栈 
 void initStack(sqStack &s){
 	s.top=s.base=new sElemType[STACK_INIT_SIZE];//申请一段连续空间存放栈元素 
 	s.size=STACK_INIT_SIZE;
 } 
 //判空
 int isEmpty(sqStack s) {
 	return s.base==s.top;
 	//栈空返回1;栈非空返回0 
 }
 //压栈
 void push(sqStack &s,sElemType val){
 	if(s.top-s.base==s.size){
 		cout<<"栈已满,无法继续压入元素"<<endl;
		 return; 
	 }
	 *s.top=val;
	 s.top++;
 }
 //打印栈顶元素
 void printTop(sqStack s){
 	cout<<"当前栈顶的元素是:"<<*(s.top-1)<<endl; 
 } 
 //弹栈
 void pop(sqStack &s,sElemType &val){
 	if(isEmpty(s)){
 		cout<<"栈已空,无法再弹出元素"<<endl;
		return; 
	 }
	 s.top--;
	 val=*s.top;
 } 
 //压栈全部容量的元素 
 void pushAll(sqStack &s){
 	sElemType   accum=1;//累加器 
 	sElemType  val;//压入栈的元素 
 	while(s.top-s.base!=s.size){
 		cout<<"请输入第"<<accum<<"个元素进行压栈"<<endl; 
 		scanf("%d",&val);
		push(s,val);
		printTop(s);
		accum++; 
	 }
	 cout<<"栈已满,无法再压入元素"<<endl;
	 return; 
 }
 //弹栈全部容量的元素
 void popAll(sqStack &s){
 	sElemType   accum=1;//累加器 
 	sElemType val;//弹出栈的元素
 	//当栈非空时 
	while(!isEmpty(s)){
		pop(s,val);
		cout<<"该栈中被弹出的第" <<accum<<"个元素为:"<<val<<endl;
		accum++; 	
	} 
	cout<<"栈已空,无法再弹出元素"<<endl;
	return; 
 } 
 
 
 int main(){
 	//栈s1测试压栈和弹栈全部容量的元素的功能 
 	sqStack s1;
 	initStack(s1);
 	pushAll(s1);
	popAll(s1);
	printTop(s1);
	//栈s2测试压栈和弹栈一个元素的功能 
	sqStack s2;
	push(s2,11);
	printTop(s2);
	push(s2,22);
	printTop(s2);
	sElemType val;
	pop(s2,val);
	cout<<"栈中被弹出的元素为:"<<val<<endl; 
	return 0; 
 } 在这里插入代码片

运行结果截图:
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 顺序栈是一种基于数组实现结构,其基本操作包括初始化、入、出和获得栈顶元素等。 1. 初始化操作顺序栈初始化操作主要是为分配一定大小的存储空间,并将栈顶指针指向底。 2. 入操作顺序栈的入操作是将一个元素压入中,即将元素存储在栈顶位置,并将栈顶指针向上移动一个位置。 3. 出操作顺序栈的出操作是将栈顶元素弹出,即将栈顶元素取出并将栈顶指针向下移动一个位置。 4. 获得栈顶元素操作顺序栈的获得栈顶元素操作是获取当前栈顶元素的值,但不会将其从中弹出。 以上是顺序栈的基本操作,它们是实现结构的基础。 ### 回答2: 顺序栈是一种基于数组实现结构。其最大的特点是支持动态扩容,它可以在已满的情况下,重新开辟一段空间,将中的所有元素复制到新的内存中,以支持更多的元素操作。 以下是顺序栈的基本操作: 1. 初始化: 首先定义一个固定大小的数组, 用top标记栈顶元素的位置,其初值为-1。这样,为空时,top值为-1。 代码如下: ```C++ #define MAXSIZE 100 // 定义数组的最大大小 typedef struct { int data[MAXSIZE]; // 存储的数组 int top; // 栈顶指针 }SqStack; ``` 初始化操作则可以使用以下代码实现: ```C++ void initStack(SqStack &S) // 定义初始化函数 { S.top = -1; // 初始化为空 } ``` 2. 入:在顺序栈中,数据元素栈顶压入,因此需要首先向栈顶top指针上移一位(即top++),再将要添加的元素放入这个位置。 代码如下: ```C++ bool push(SqStack &S, int x) // 定义入函数,x为将要入元素 { if(S.top == MAXSIZE-1) return false; // 判断是否空,是则直接退出 S.data[++S.top] = x; // 元素 return true; } ``` 3. 出:出和入相反,先将栈顶元素赋值给要出元素,并将栈顶指针下移(即top--),表示栈顶元素已经出代码如下: ```C++ bool pop(SqStack &S, int &x) // 定义出函数,x为出元素的值 { if(S.top == -1) return false; // 判断是否空,是则直接退出 x = S.data[S.top--]; // 元素 return true; } ``` 4. 获得栈顶元素:获取栈顶元素时,只需要返回top指针所指向的位置上的元素即可。 代码如下: ```C++ bool getTop(SqStack &S, int &x) // 定义获取栈顶元素函数,x为栈顶元素的值 { if(S.top == -1) return false; // 判断是否空,是则直接退出 x = S.data[S.top]; // 获取栈顶元素 return true; } ``` 总的来说,顺序栈是一种常用的数据结构,通过以上几个基本操作,可以帮助我们实现一些高级算法和数据结构,如逆波兰表达式、迷宫问题等。 ### 回答3: 顺序栈是一种运算受限的线性表,它分为底和栈顶两部分,底固定,而栈顶可以动态改变。的基本操作有:初始化、入、出及获得栈顶元素等。本文将从这四个方面分别介绍顺序栈的基本操作。 1. 初始化操作 初始化操作顺序栈的必备操作,先声明一个数组和一个指针top来表示顺序栈,然后用top表示栈顶指针,top=-1表示空。 2. 入操作操作就是向顺序栈中加入一个元素。需要判断当前是否已满,如果没有满,则将元素插入到栈顶处,同时top指针加1。插入成功后,元素个数加1,用于判断是否已满。 3. 出操作操作就是从顺序栈中弹出一个元素。需要判断当前是否为空,如果不为空,则将栈顶元素弹出,并将top指针减1。弹出成功后,元素个数减1,用于判断是否为空。 4. 获得栈顶元素操作 获得栈顶元素操作就是获取当前栈顶元素的值。需要判断当前是否为空,如果不为空,则返回栈顶元素的值,否则返回空值。 综上所述,顺序栈的基本操作包括初始化、入、出及获得栈顶元素操作,这些操作都需要对的空间状态进行判断,从而保证的正确使用。当应用程序需要使用顺序存储结构表示时,可以按照上述方法进行实现

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值