目录
前言
此专栏包含408考研数据结构全部内容,除其中使用到C++引用外,全为C语言代码。使用C++引用主要是为了简化指针的使用,避免二重指针的出现。
已完成内容
[数据结构]:01-顺序表(C语言实现)_Chandni.的博客-CSDN博客
[数据结构]:02-单链表(C语言实现)_Chandni.的博客-CSDN博客
[数据结构]:18-链栈(不带头结点)(C语言实现)_Chandni.的博客-CSDN博客
栈实现
01-开发环境
语言:C/C++14
编译器:MinGW64
集成开发环境:CLion2022.1.3
02-文件布局
请在CLion集成开发环境中创建C++可执行程序,否则无法运行,原因上面已解释。
03-代码
01-主函数
用于测试和初始化栈。
#include "./Head/StackData.h"
#include "./Source/StackCommon.cpp"
#include "./Source/StackFunction.cpp"
int main() {
Stack SqStack;
StackInitialization(SqStack);
// 入栈
Push(SqStack, 1);
Push(SqStack, 2);
Push(SqStack, 3);
StackPrint(SqStack);
printf("---------------------------------\n");
// 获取栈顶元素
ElemType value;
StackGetTopElement(SqStack, value);
printf("Stack TopElement Value = %d\n", value);
printf("---------------------------------\n");
// 出栈
for (int i = SqStack.top; i >= 0; i--) {
Pop(SqStack, value);
printf("Stack Pop Value = %d\n", value);
}
return 0;
}
02-头文件
用于存储结构体和常量等。
//
// Created by 24955 on 2023-02-22.
//
#ifndef LINKEDLIST_LINKEDLISTDATA_H
#define LINKEDLIST_LINKEDLISTDATA_H
// 头文件
#include <stdio.h>
#include <stdlib.h>
// 常量
#define MaxSize 3
typedef int ElemType;
// 结构体-栈数组实现形式
typedef struct {
ElemType data[MaxSize];
int top;
} Stack;
#endif //LINKEDLIST_LINKEDLISTDATA_H
03-StackCommon.cpp
用于存储公共函数以及栈的输出。
//
// Created by 24955 on 2023-02-22.
//
// 栈的初始化
void StackInitialization(Stack &SqStack) {
/*
* 1. 初始化栈*/
SqStack.top = -1; // 表示栈为空
}
// 栈的输出
void StackPrint(Stack SqStack) {
/*
* 1. 判断是否为空栈
* 2. 若不为空,则按顺序输出栈中数据*/
if (SqStack.top != -1) {
for (int i = SqStack.top; i >= 0; i--) {
printf("%3d", SqStack.data[i]);
}
printf("\n");
} else {
printf("Stack Empty.\n");
}
}
04-StackFunction.cpp
用于存储入栈、出栈、取栈顶元素值等函数。
//
// Created by 24955 on 2023-02-24.
//
// 入栈
void Push(Stack &SqStack, ElemType value) {
/*
* 1. 判断栈是否已满
* 2. 若不满则入栈*/
if (SqStack.top < MaxSize - 1) {
SqStack.data[++SqStack.top] = value;
} else {
printf("Stack Full.\n");
}
}
// 出栈
void Pop(Stack &SqStack, ElemType &value) {
/*
* 1. 判断栈是否为空
* 2. 若不为空,则出栈*/
if (SqStack.top > -1) {
value = SqStack.data[SqStack.top--];
} else {
printf("Stack Empty.\n");
}
}
// 获取栈顶元素
void StackGetTopElement(Stack SqStack, ElemType &value) {
/*
* 1. 判断栈是否为空
* 2. 若不为空,则输出栈顶元素值*/
if (SqStack.top != -1) {
value = SqStack.data[SqStack.top];
} else {
printf("Stack Empty.\n");
}
}
结语
本章栈的实现形式为数组的实现形式,栈还可以使用链表形式实现,但408考试概率较小,若有需要可留言,后续再发。
此博客主要用于408考研数据结构C语言实现记录,内有不足,可留言,可讨论。