数据结构---顺序栈、链栈

特点

typedef struct Stack { int* base; //栈底 int* top;//栈顶 int stacksize //栈的容量; }SqStack;

typedef struct StackNode { int data;//数据域 struct StackNode* next; //指针域 }StackNode,*LinkStack;

顺序栈

cpp 复制代码
#define MaxSize 100
typedef struct Stack { int* base; int* top; int stacksize; }SqStack;

//***********************************   基本操作函数  *******************************************

int InitStack(SqStack& s)
{
	
	s.base = new int[MaxSize];

	s.top = s.base;

	s.stacksize = MaxSize;
	return 1;

}

int Push(SqStack& s, int e)		// Push入栈,到XXX	eg: pushd...
{
	if(s.top-s.base==s.stacksize)	return 0;
	*(s.top++) = e;		return 1;
}

int Pop(SqStack& s, int e) {
	if(s.top==s.base)	return 0;
	e = *--s.top;	 return 1;		// 1、减减		2、指向栈顶元素		3、再给e
}	

bool GetTop(SqStack& s, int e) {
	if(s.top=s.base)	return false;
	else   e = *--s.top;	return true;
}


//********************************功能实现函数**************************************//

void PushToStack(SqStack& s) {
	int n; int e; int flag;
	printf("请输入入栈元素个数(>=1):\n");
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		printf("请输入第%d个元素的值:", i + 1);
		scanf("%d", &e);
		flag = Push(s, e);
		if (flag)printf("%d已入栈\n", e);
		else { printf("栈已满!!!\n"); break; }
	}
}

void PopFromStack(SqStack& s) {
	int n; int e; int flag;
	printf("请输入出栈元素个数(>=1):\n");
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		flag = Pop(s, e);
		if (flag)printf("%d已出栈\n", e);
		else { printf("栈已空!!!\n"); break; }
	}
}

void GetTopOfStack(SqStack& s){
	int e; bool flag;
	flag = GetTop(s, e);
	if (flag)printf("栈顶元素为:%d\n", e);
	else printf("栈已空!!!\n");
}



void memu() {
	printf("********1.入栈      2.出栈*********\n");
	printf("********3.取栈顶    4.退出*********\n");
}

int main() {
	int choice = 0;;
	SqStack s;
	InitStack(s);

	switch (choice)
	{
	case 1:PushToStack(s); break;
	case 2:PopFromStack(s); break;
	case 3:GetTopOfStack(s); break;;
	default:
		printf("输入错误!!!\n");
		break;
	}
	return 0;
}

链栈

cpp 复制代码
typedef struct StackNode { int data; struct StackNode* next; }StackNode,*LinkStack;

//***********************************   基本操作函数  *******************************************

int InitStack(LinkStack &s)
{
	s = NULL;
	return 1;

}

int Push(LinkStack &s, int e)		
{
	StackNode* p;
	//生成新节点
	p = new StackNode;
	//赋值
	p->data = e;
	p->next = s;
	//压入栈顶
	s = p;
	return 1;
}


bool Pop(LinkStack& s ,int& e)
{
	LinkStack p;
	if (s == NULL)return false;//栈空
	e = s->data;
	p = s;
	s = s->next;
	free(p);
	return true;
}

bool GetTop(LinkStack &s, int &e) 
{
	if (s == NULL) return false;//栈顶为空
	e = s->data;
	return true;
}



//********************************功能实现函数**************************************//

void PushToStack(LinkStack& s) {
	int n; int e; int flag;
	printf("请输入入栈元素个数(>=1):\n");
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		printf("请输入第%d个元素的值:", i + 1);
		scanf("%d", &e);
		flag = Push(s, e);
		if (flag)printf("%d已入栈\n", e);
	}

}

void PopFromStack(LinkStack& s) {
	int n; int e; int flag;
	printf("请输入出栈元素个数(>=1):\n");
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		flag = Pop(s, e);
		if (flag)printf("%d已出栈\n", e);
		else { printf("栈已空!!!\n"); break; }
	}
}

void GetTopOfStack(LinkStack& s){
	int e; bool flag;
	flag = GetTop(s, e);
	if (flag)printf("栈顶元素为:%d\n", e);
	else printf("栈已空!!!\n");
}



void memu() {
	printf("********1.入栈			2.出栈*********\n");
	printf("********3.取栈顶元素    4.退出*********\n");
}

int main() {
	int choice = 0;;
	LinkStack s;
	InitStack(s);

	switch (choice)
	{
	case 1:PushToStack(s); break;
	case 2:PopFromStack(s); break;
	case 3:GetTopOfStack(s); break;;
	default:
		printf("输入错误!!!\n");
		break;
	}
	return 0;
}
相关推荐
风筝在晴天搁浅10 分钟前
快手/字节 CodeTop LeetCode 415.字符串相加
算法·leetcode
hoiii18734 分钟前
基于栅格法的机器人工作空间划分系统
数据结构·机器人
DragonnAi37 分钟前
猫咪如厕检测与分类识别系统系列【十四】 项目结构重新整理-即将开源完整算法
算法·开源
机器视觉_Explorer1 小时前
【halcon】编程技巧:鼠标擦除
图像处理·人工智能·深度学习·算法·视觉检测
wljy11 小时前
二、静态库的制作和使用
linux·c语言·开发语言·c++
灵智实验室2 小时前
PX4状态估计技术EKF2详解(二):EKF2 误差状态动力学与协方差传播
算法·无人机·px 4
米粒12 小时前
力扣算法刷题 Day 64 Floyd算法 & A* 算法 & 总结篇
算法·leetcode·职场和发展
XX風2 小时前
OpenGL中Face culling 面剔除的具体实现
算法·图形渲染
IT猿手2 小时前
光伏模型参数估计:基于山羊优化算法(GOA )的光伏模型参数辨识问题求解研究,免费提供完整MATLAB代码链接
开发语言·算法·matlab·群智能优化算法·智能优化算法·光伏模型参数估计·光伏模型参数辨识
♛识尔如昼♛3 小时前
C 进阶(5) - 系统数据文件和信息
c语言·系统文件和信息