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

特点

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;
}
相关推荐
int型码农9 分钟前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序
UFIT23 分钟前
NoSQL之redis哨兵
java·前端·算法
喜欢吃燃面24 分钟前
C++刷题:日期模拟(1)
c++·学习·算法
SHERlocked9327 分钟前
CPP 从 0 到 1 完成一个支持 future/promise 的 Windows 异步串口通信库
c++·算法·promise
怀旧,32 分钟前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法
积极向上的向日葵1 小时前
有效的括号题解
数据结构·算法·
GIS小天1 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
人工智能·算法·机器学习·彩票
_Itachi__1 小时前
LeetCode 热题 100 74. 搜索二维矩阵
算法·leetcode·矩阵
不忘不弃1 小时前
计算矩阵A和B的乘积
线性代数·算法·矩阵
不爱写代码的玉子1 小时前
HALCON透视矩阵
人工智能·深度学习·线性代数·算法·计算机视觉·矩阵·c#