以下是基于top -1的顺序栈的完整代码展示包含初始化、入栈、出栈、获取栈顶元素、判断栈空、判断栈满、计算栈长度、清空栈和销毁栈等操作完整代码C #include stdio.h #include stdlib.h #include stdbool.h #define MAX_SIZE 100 // 定义栈的最大容量 // 定义顺序栈结构体 typedef struct { int data[MAX_SIZE]; // 存储栈元素的数组 int top; // 栈顶指针初始化为-1 } SeqStack; // 初始化顺序栈 void InitStack(SeqStack *S) { S-top -1; // 栈顶指针初始化为-1表示栈为空 } // 判断栈是否为空 bool IsEmpty(SeqStack S) { return S.top -1; } // 判断栈是否为满 bool IsFull(SeqStack S) { return S.top MAX_SIZE - 1; } // 计算栈的长度 int StackLength(SeqStack S) { return S.top 1; } // 入栈操作 bool Push(SeqStack *S, int element) { if (IsFull(*S)) { printf(Stack is full.\n); return false; } S-top; // 栈顶指针加1 S-data[S-top] element; // 将元素放入栈顶 return true; } // 出栈操作 bool Pop(SeqStack *S, int *element) { if (IsEmpty(*S)) { printf(Stack is empty.\n); return false; } *element S-data[S-top]; // 取出栈顶元素 S-top--; // 栈顶指针减1 return true; } // 获取栈顶元素 bool GetTop(SeqStack S, int *element) { if (IsEmpty(S)) { printf(Stack is empty.\n); return false; } *element S.data[S.top]; // 返回栈顶元素 return true; } // 清空栈 void ClearStack(SeqStack *S) { S-top -1; // 栈顶指针置为-1表示栈为空 } // 销毁栈 void DestroyStack(SeqStack *S) { ClearStack(S); // 清空栈 printf(Stack destroyed.\n); } // 打印栈中元素 void PrintStack(SeqStack S) { if (IsEmpty(S)) { printf(Stack is empty.\n); return; } printf(Stack: ); for (int i 0; i S.top; i) { printf(%d , S.data[i]); } printf(\n); } int main() { SeqStack S; InitStack(S); // 初始化顺序栈 Push(S, 10); // 入栈10 Push(S, 20); // 入栈20 Push(S, 30); // 入栈30 PrintStack(S); // 输出: Stack: 10 20 30 int topElement; GetTop(S, topElement); // 获取栈顶元素 printf(Top element: %d\n, topElement); // 输出: Top element: 30 int poppedElement; Pop(S, poppedElement); // 出栈 printf(Popped element: %d\n, poppedElement); // 输出: Popped element: 30 PrintStack(S); // 输出: Stack: 10 20 printf(Stack length: %d\n, StackLength(S)); // 输出: Stack length: 2 ClearStack(S); // 清空栈 PrintStack(S); // 输出: Stack is empty. DestroyStack(S); // 销毁栈 return 0; }代码解析初始化顺序栈将top初始化为-1表示栈为空。判断栈是否为空如果top -1则栈为空。判断栈是否为满如果top MAX_SIZE - 1则栈已满。计算栈的长度栈的长度为top 1。入栈操作如果栈未满则将元素放入栈顶并将top加1。出栈操作如果栈不为空则取出栈顶元素并将top减1。获取栈顶元素如果栈不为空则返回栈顶元素。清空栈将top置为-1表示栈为空。销毁栈调用ClearStack清空栈并提示栈已销毁。打印栈中元素从栈底到栈顶遍历并打印所有元素。输出结果Stack: 10 20 30 Top element: 30 Popped element: 30 Stack: 10 20 Stack length: 2 Stack is empty. Stack destroyed.总结基于top -1的顺序栈实现简单且直观适用于栈底位置固定的场景。通过掌握这些基本操作可以更好地理解栈的逻辑结构和应用场景。
笔记:数据结构(基于top = -1的顺序栈的完整代码展示)
以下是基于top -1的顺序栈的完整代码展示包含初始化、入栈、出栈、获取栈顶元素、判断栈空、判断栈满、计算栈长度、清空栈和销毁栈等操作完整代码C #include stdio.h #include stdlib.h #include stdbool.h #define MAX_SIZE 100 // 定义栈的最大容量 // 定义顺序栈结构体 typedef struct { int data[MAX_SIZE]; // 存储栈元素的数组 int top; // 栈顶指针初始化为-1 } SeqStack; // 初始化顺序栈 void InitStack(SeqStack *S) { S-top -1; // 栈顶指针初始化为-1表示栈为空 } // 判断栈是否为空 bool IsEmpty(SeqStack S) { return S.top -1; } // 判断栈是否为满 bool IsFull(SeqStack S) { return S.top MAX_SIZE - 1; } // 计算栈的长度 int StackLength(SeqStack S) { return S.top 1; } // 入栈操作 bool Push(SeqStack *S, int element) { if (IsFull(*S)) { printf(Stack is full.\n); return false; } S-top; // 栈顶指针加1 S-data[S-top] element; // 将元素放入栈顶 return true; } // 出栈操作 bool Pop(SeqStack *S, int *element) { if (IsEmpty(*S)) { printf(Stack is empty.\n); return false; } *element S-data[S-top]; // 取出栈顶元素 S-top--; // 栈顶指针减1 return true; } // 获取栈顶元素 bool GetTop(SeqStack S, int *element) { if (IsEmpty(S)) { printf(Stack is empty.\n); return false; } *element S.data[S.top]; // 返回栈顶元素 return true; } // 清空栈 void ClearStack(SeqStack *S) { S-top -1; // 栈顶指针置为-1表示栈为空 } // 销毁栈 void DestroyStack(SeqStack *S) { ClearStack(S); // 清空栈 printf(Stack destroyed.\n); } // 打印栈中元素 void PrintStack(SeqStack S) { if (IsEmpty(S)) { printf(Stack is empty.\n); return; } printf(Stack: ); for (int i 0; i S.top; i) { printf(%d , S.data[i]); } printf(\n); } int main() { SeqStack S; InitStack(S); // 初始化顺序栈 Push(S, 10); // 入栈10 Push(S, 20); // 入栈20 Push(S, 30); // 入栈30 PrintStack(S); // 输出: Stack: 10 20 30 int topElement; GetTop(S, topElement); // 获取栈顶元素 printf(Top element: %d\n, topElement); // 输出: Top element: 30 int poppedElement; Pop(S, poppedElement); // 出栈 printf(Popped element: %d\n, poppedElement); // 输出: Popped element: 30 PrintStack(S); // 输出: Stack: 10 20 printf(Stack length: %d\n, StackLength(S)); // 输出: Stack length: 2 ClearStack(S); // 清空栈 PrintStack(S); // 输出: Stack is empty. DestroyStack(S); // 销毁栈 return 0; }代码解析初始化顺序栈将top初始化为-1表示栈为空。判断栈是否为空如果top -1则栈为空。判断栈是否为满如果top MAX_SIZE - 1则栈已满。计算栈的长度栈的长度为top 1。入栈操作如果栈未满则将元素放入栈顶并将top加1。出栈操作如果栈不为空则取出栈顶元素并将top减1。获取栈顶元素如果栈不为空则返回栈顶元素。清空栈将top置为-1表示栈为空。销毁栈调用ClearStack清空栈并提示栈已销毁。打印栈中元素从栈底到栈顶遍历并打印所有元素。输出结果Stack: 10 20 30 Top element: 30 Popped element: 30 Stack: 10 20 Stack length: 2 Stack is empty. Stack destroyed.总结基于top -1的顺序栈实现简单且直观适用于栈底位置固定的场景。通过掌握这些基本操作可以更好地理解栈的逻辑结构和应用场景。