数据结构 链栈

头文件

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;
}
相关推荐
青山木5 小时前
Hot 100 ---腐烂的橘子
java·数据结构·后端·算法·leetcode·广度优先
未来之窗软件服务5 小时前
计算机考试-快速排序—东方仙盟
数据结构·算法·排序算法·仙盟创梦ide·东方仙盟
小龙报5 小时前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
wWYy.6 小时前
数据结构:跳表
数据结构
变量未定义~7 小时前
虚拟节点-星石传送阵(4星)、强连通分量
数据结构·算法
电子云与长程纠缠8 小时前
UE中使用TGuardValue与TInlineComponentArray数据结构
开发语言·数据结构·学习·ue5·游戏引擎
来一碗刘肉面9 小时前
串的定义与基本操作
数据结构
wWYy.9 小时前
算法:合并两个有序数组
数据结构·算法
三克的油9 小时前
数据结构-1
数据结构
闪电悠米1 天前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法