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

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; 
}
相关推荐
启观川7 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸7 小时前
排序算法介绍
python·算法·排序算法
动词ing8 小时前
【题目练习】算法 组合总和||
算法
wuminyu8 小时前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
longlongzihan8 小时前
链表找环:Floyd 判圈算法(LeetCode 141 & 142 )
c++·算法·leetcode·链表
专业程序开发源8 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
Logic1019 小时前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法
yi0119 小时前
LeetCode 643. 子数组最大平均数 I|从暴力枚举到滑动窗口
人工智能·笔记·python·算法·leetcode·滑动窗口
极光通讯9 小时前
服务器内存来料检验(IQC)实操:批次追溯、外观判定与上机验证
java·服务器·算法
淡海水10 小时前
02-04-原理篇-GC Roots与对象图遍历
算法·unity·c#·图·gc·遍历·roots