栈的操作算法实现(数据结构)

1.实验目的

验证性实验:实现顺序栈各种基本运算的算法掌握栈的存储结构的表示和实现方法。

目的:领会顺序栈存储结构和掌握顺序栈中各种基本运算算法设计。

2.实验内容

验证性实验内容:编写一个程序sqstack.cpp,实现顺序栈(假设栈中元素类型ElemType为char的各种基本运算,并在此基础上设计一个程序exp3-1.cpp。

实现如下功能:

(1)初始化栈s。

(2)判断栈s是否非空。

(3)依次进栈元素a、b、c、d、e。

(4)判断栈s是否非空。

(5)输出出栈序列。

(6)判断栈s是否非空。

(7)释放栈。

3.具体代码实现及解释

cpp 复制代码
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct
{
	ElemType data[MaxSize];
	int top;				//栈指针 
}SqStack; 					//声明顺序站类型 
void InitStack(SqStack *&s)		//初始化顺序站 
{
	s=(SqStack *)malloc(sizeof(SqStack));
	s->top=-1;
}
void DestroyStack(SqStack *&s)	//销毁顺序站 
{
	free(s);
}
bool StackEmpty(SqStack *s)	//判断栈空否 
{
	return(s->top==-1);
}
bool Push(SqStack *&s,ElemType e)	//进栈 
{
	if (s->top==MaxSize-1)		//栈满的情况,即栈上溢出 
		return false;
	s->top++;
	s->data[s->top]=e;
	return true;
}
bool Pop(SqStack *&s,ElemType &e)	//出栈 
{
	if(s->top==-1)			//栈为空的情况,即栈下溢出 
		return false;
	e=s->data[s->top];
	s->top--;
	return true; 
}
//#include "sqstack.cpp"			//包含顺序站的基本运算算法 
bool GetTop(SqStack *s,ElemType &e)
{
	if(s->top==-1)
		return false;
	e=s->data[s->top];
	return true;
}

int main()
{
	ElemType e;
	SqStack *s;
	printf("顺序栈s的基本运算如下:");
	printf("(1)初始化栈s\n");
	InitStack(s);
	printf("(2)栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf("(3)依次进栈元素a,b,c,d,e\n");
	Push(s,'a');
	Push(s,'b');
	Push(s,'c');
	Push(s,'d');
	Push(s,'e');
	printf("(4)栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf("(5)出栈序列:");
	while(!StackEmpty(s))
	{
		Pop(s,e);
		printf("%c ",e);
	 } 
	 printf("\n");
	 printf("(6)栈为%s\n",(StackEmpty(s)?"空":"非空"));
	 printf("(7)释放栈\n");
	 DestroyStack(s);
	 return 1; 
}
相关推荐
蜡笔小电芯5 分钟前
【C语言】指针与回调机制学习笔记
c语言·笔记·学习
Y1nhl6 分钟前
力扣_链表_python版本
开发语言·python·算法·leetcode·链表·职场和发展
qq_4017004121 分钟前
C语言中位运算以及获取低8位和高8位、高低位合并
c语言·开发语言·算法
CoovallyAIHub25 分钟前
YOLO模型优化全攻略:从“准”到“快”,全靠这些招!
深度学习·算法·计算机视觉
闻缺陷则喜何志丹30 分钟前
【BFS】 P10864 [HBCPC2024] Genshin Impact Startup Forbidden II|普及+
c++·算法·宽度优先·洛谷
MicroTech20251 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
今天背单词了吗9801 小时前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
手握风云-1 小时前
优选算法的链脉之韵:链表专题
数据结构·算法·链表
Coding小公仔1 小时前
LeetCode 151. 反转字符串中的单词
开发语言·c++·算法
稳兽龙1 小时前
P1098 [NOIP 2007 提高组] 字符串的展开
c++·算法·模拟