顺序栈的功能实现(初始化,判空,压栈,弹栈,打印栈顶元素,批量手动输入元素压栈弹栈) ——以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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值