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

特点

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;
}
相关推荐
CSDN_RTKLIB1 分钟前
树、图高层抽象模型
算法
Dola_Zou8 小时前
工厂智能排产软件算法保护与按产线计费实战
算法·自动化·软件工程·软件加密
啦啦啦啦啦zzzz9 小时前
Logger的组装(c++20)
c++·算法·c++20
尾善爱看海10 小时前
前端算法与手写题集
前端·算法
繁星蓝雨11 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
程序员阿鹏11 小时前
为什么MySQL InnoDB选择B+树?
数据结构·数据库·b树·sql·mysql·算法·缓存
yutian060611 小时前
C: Unix UTC 时间戳转为 UTC+8 北京时间
c语言·unix
AI 思录11 小时前
Prompt 事故档案(八):日常表达被标为“待校准”,AI 的爹味语法从哪里来
大数据·人工智能·算法·prompt·用户体验·ai合规
月光船幽幽11 小时前
跨范式映射的稳定接口设计
人工智能·python·算法
郝学胜-神的一滴12 小时前
C++11 工程级应用 09:告别无谓拷贝,解锁高性能移动语义
开发语言·数据结构·c++·vscode·软件工程·visual studio