跳到主要内容

数据结构06-栈

数据结构06-栈

代码

#include <stdio.h>
#include <stdlib.h>

#define STACK_MAX_SIZE 10 // 定义栈的最大容量

// 定义一个字符栈的结构体
typedef struct CharStack {
int top; // 栈顶指针,初始化为-1,表示栈为空
int data[STACK_MAX_SIZE]; // 栈的存储数组,最大长度固定
} *CharStackPtr;

// 输出栈中的元素
void outputStack(CharStackPtr paraStack) {
for (int i = 0; i <= paraStack->top; i ++) {
printf("%c ", paraStack->data[i]);
}
printf("\r\n");
}

// 初始化一个空的字符栈
CharStackPtr charStackInit() {
CharStackPtr resultPtr = (CharStackPtr)malloc(sizeof(struct CharStack));
resultPtr->top = -1; // 初始化栈顶指针为-1
return resultPtr;
}

// 向栈中推入一个元素
void push(CharStackPtr paraStackPtr, int paraValue) {
if (paraStackPtr->top >= STACK_MAX_SIZE - 1) { // 检查栈空间是否已满
printf("Cannot push element: stack full.\r\n");
return;
}
paraStackPtr->top++; // 更新栈顶指针
paraStackPtr->data[paraStackPtr->top] = paraValue; // 将元素推入栈中
}

// 从栈中弹出一个元素
char pop(CharStackPtr paraStackPtr) {
if (paraStackPtr->top < 0) { // 检查栈是否为空
printf("Cannot pop element: stack empty.\r\n");
return '\0'; // 如果栈为空,返回空字符
}
paraStackPtr->top--; // 更新栈顶指针
return paraStackPtr->data[paraStackPtr->top + 1]; // 返回弹出的元素
}

// 测试push和pop函数
void pushPopTest() {
printf("---- pushPopTest begins. ----\r\n");

CharStackPtr tempStack = charStackInit(); // 初始化栈
printf("After initialization, the stack is: ");
outputStack(tempStack);

// 推入元素
for (char ch = 'a'; ch < 'm'; ch ++) {
printf("Pushing %c.\r\n", ch);
push(tempStack, ch);
outputStack(tempStack);
}

// 弹出元素
char ch;
for (int i = 0; i < 3; i ++) {
ch = pop(tempStack);
printf("Pop %c.\r\n", ch);
outputStack(tempStack);
}

printf("---- pushPopTest ends. ----\r\n");
}

// 程序入口点
int main() {
pushPopTest(); // 运行测试函数
}

代码总结:

  1. 定义了一个固定大小的栈(STACK_MAX_SIZE为10),用于存储字符。

  2. CharStack结构体包含一个栈顶指针top和一个数据数组data。栈顶指针初始化为-1,表示栈为空。

  3. charStackInit函数用于初始化一个空栈,并返回栈的指针。

  4. push函数用于向栈中推入一个新元素。它首先检查栈是否已满,如果未满,则将新元素推入栈顶。

  5. pop函数用于从栈中弹出一个元素。它首先检查栈是否为空,如果不为空,则弹出栈顶元素并返回。

  6. outputStack函数用于输出栈中的所有元素。

  7. pushPopTest函数是一个测试函数,用于测试pushpop操作。它首先初始化一个栈,然后连续推入一系列字符,之后弹出几个字符,每次操作后都输出栈的当前状态。

  8. main函数是程序的入口点,它调用pushPopTest函数来执行测试。

运行结果