数据结构 顺序栈

头文件

cpp 复制代码
#pragma once
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
using namespace std;

#define STACK_INIT_SIZE 10
#define STACKINCREMENT 2

typedef struct seqstack
{
    int* base; // 栈底指针 
    int* top;  // 栈顶指针
    int stacksize;   // 栈容量
}seqstack;

//1.初始化
void InitStack(seqstack* ps);
//2.栈的元素个数
size_t StackLength(const seqstack* ps);
//3.判空
bool IsEmpty(const seqstack* ps);
//4.判满
bool IsFull(const seqstack* ps);
//5.扩容
bool incem(seqstack* p);
//入栈
bool Push(seqstack* ps, int val);
//6.打印
void PrintStack(const seqstack* ps);
//7.出栈并获取栈顶元素
bool Pop(seqstack* ps, int* pval);
//8.获取栈顶元素
bool GetTop(seqstack* ps, int* pval);
//9.清空
void ClearStack(seqstack* ps);
//10.销毁
void DestroyStack(seqstack* ps);

源文件

cpp 复制代码
#include"顺序栈.h"

//1.初始化
void InitStack(seqstack* ps) {
	assert(ps != nullptr);
	int* p = (int*)malloc(sizeof(int) * STACK_INIT_SIZE);
	if (p == nullptr) {
		cout << "init err" << endl;
		return;
	}
	ps->base = ps->top = p;
	ps->stacksize = STACK_INIT_SIZE;
}
//2.栈的元素个数
size_t StackLength(const seqstack* ps) {
	assert(ps != nullptr);
	return ps->top - ps->base;
}
//3.判空
bool IsEmpty(const seqstack* ps) {
	assert(ps != nullptr);
	return ps->base == ps->top;
}
//4.判满
bool IsFull(const seqstack* ps) {
	assert(ps != nullptr);
	return (ps->top - ps->base) == ps->stacksize;
}
//扩容
bool incem(seqstack* ps) {
	assert(ps != nullptr);
	int newstacksize = ps->stacksize * STACKINCREMENT;
	int* p = (int*)realloc(ps->base,sizeof(int) * newstacksize);
	if (p == nullptr) {
		cout << "expand err" << endl;
		return false;
	}
	ps->base = p;
	ps->stacksize = newstacksize;
	ps->top = p + StackLength(ps);
	return true;
}
//5.入栈
bool Push(seqstack* ps, int val) {
	assert(ps != nullptr);
	if (IsFull(ps)&&!incem(ps))return false;
	*ps->top = val;
	ps->top++;
	return true;
}
//6.打印
void PrintStack(const seqstack* ps) {
	assert(ps != nullptr);
	if (IsEmpty(ps))return;
	for (int* p = ps->top - 1; p>=ps->base; p--) {
		cout << *p << " ";
	}cout << endl;
}
//7.出栈并获取栈顶元素
bool Pop(seqstack* ps, int* pval) {
	assert(ps != nullptr);
	if (IsEmpty(ps))return false;
	ps->top--;
	*pval = *(ps->top);
	return true;
}
//8.获取栈顶元素
bool GetTop(seqstack* ps, int* pval) {
	assert(ps != nullptr);
	if (IsEmpty(ps))return false;
	*pval = *(ps->top - 1);
	return true;
}
//9.清空
void ClearStack(seqstack* ps) {
	assert(ps != nullptr);
	if (IsEmpty(ps))return;
	ps->top = ps->base;
}
//10.销毁
void DestroyStack(seqstack* ps) {
	assert(ps != nullptr);
	free(ps->base);
	ps->base = ps->top = nullptr;
	ps->stacksize = 0;
}
int main() {

	return 0;
}
相关推荐
顶点多余9 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
AI情绪识别开源10 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
罗西的思考10 小时前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习
hahaha601611 小时前
HLS高层次综合设计技巧--C++类和模板
图像处理·人工智能·算法·计算机视觉
多弗朗皮卡丘12 小时前
算法详解4:买卖股票的最佳时机系列(上)
算法
维克兜率天14 小时前
【维克】动量指标家族:RSI、ROC、CCI、Momentum全面解析
python·算法
AI情绪识别开源15 小时前
检信 AI 智能推广平台(代号:JX-Promote)
人工智能·算法·erlang
老当益壮梁奶奶15 小时前
Linux软件编程学习笔记(八):进程间通信详解(1)
linux·c语言·笔记·学习·算法
不会就选b16 小时前
算法日常・每日刷题--<BFS拓扑排序>4
算法
不正经学生16 小时前
C语言动态内存管理(上):堆上的自由与责任
c语言·开发语言·c++·算法·面试