数据结构 链栈

头文件

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

typedef struct stacknode {
	int data;
	stacknode* next;
}stacknode;
typedef struct linkstack {
	int cursize;
	stacknode* top;
}linkstack;

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

源文件

cpp 复制代码
#include"链栈.h"

//1.初始化
void InitStack(linkstack* ps) {
	assert(ps != nullptr);
	ps->cursize = 0;
	ps->top = nullptr;
}
//2.栈的元素个数
size_t StackLength(const linkstack* ps) {
	assert(ps != nullptr);
	return ps->cursize;
}
//3.判空
bool IsEmpty(const linkstack* ps) {
	assert(ps != nullptr);
	return ps->cursize == 0;
}
//4.入栈
bool Push(linkstack* ps, int val) {
	assert(ps != nullptr);
	stacknode* p = (stacknode*)malloc(sizeof(stacknode));
	if (p == nullptr)return false;
	p->data = val;
	p->next = ps->top;
	ps->top = p;
	ps->cursize++;
	return true;
}
//5.打印
void PrintStack(const linkstack* ps) {
	assert(ps != nullptr);
	if (IsEmpty(ps))return;
	for (stacknode* p = ps->top; p != nullptr; p = p->next) {
		cout << p->data << " ";
	}
	cout << endl;
}
//6.出栈并获取栈顶元素
bool Pop(linkstack* ps, int* pval) {
	assert(ps != nullptr&&pval!=nullptr);
	if (IsEmpty(ps))return false;
	*pval = ps->top->data;
	stacknode*p=ps->top;
	ps->top = ps->top->next;
	free(p);
	p = nullptr;
	ps->cursize--;
	return true;
}
//7.获取栈顶元素
bool GetTop(linkstack* ps, int* pval) {
	assert(ps != nullptr);
	if (IsEmpty(ps))return false;
	*pval = ps->top->data;
	return true;
}
//8.清空
void ClearStack(linkstack* ps) {
	assert(ps != nullptr);
	if (IsEmpty(ps))return;
	stacknode* p = ps->top;
	while (p) {
		stacknode* k = p->next;
		free(p);
		p = k;
	}
	p = nullptr;
	ps->cursize = 0;
}
//9.销毁
void DestroyStack(linkstack* ps) {
	assert(ps != nullptr);
	ClearStack(ps);
}

int main() {

	return 0;
}
相关推荐
NEXT061 天前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
小妖6661 天前
js 实现快速排序算法
数据结构·算法·排序算法
独好紫罗兰1 天前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
wuhen_n1 天前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
2401_841495641 天前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
独好紫罗兰1 天前
对python的再认识-基于数据结构进行-a002-列表-列表推导式
开发语言·数据结构·python
2401_841495641 天前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归
数智工坊1 天前
【数据结构-树与二叉树】4.5 线索二叉树
数据结构
数智工坊1 天前
【数据结构-树与二叉树】4.3 二叉树的存储结构
数据结构
独好紫罗兰1 天前
对python的再认识-基于数据结构进行-a004-列表-实用事务
开发语言·数据结构·python