C语言实现顺序栈:初始化、插入、删除、取值等操作详解
#include <stdio.h> #include <stdlib.h>
#define MAXSIZE 100 // 栈的最大容量
typedef struct { int data[MAXSIZE]; // 存储栈中元素的数组 int top; // 栈顶指针 } SeqStack;
// 初始化顺序栈 void InitStack(SeqStack *stack) { stack->top = -1; // 栈顶指针置为-1,表示栈为空 }
// 判断栈是否为空 int IsEmpty(SeqStack *stack) { return stack->top == -1; }
// 判断栈是否为满 int IsFull(SeqStack *stack) { return stack->top == MAXSIZE - 1; }
// 入栈 void Push(SeqStack *stack, int element) { if (IsFull(stack)) { printf('Stack is full, cannot push element.\n'); return; } stack->top++; // 栈顶指针加1 stack->data[stack->top] = element; // 将元素插入栈顶位置 }
// 出栈 void Pop(SeqStack *stack) { if (IsEmpty(stack)) { printf('Stack is empty, cannot pop element.\n'); return; } stack->top--; // 栈顶指针减1 }
// 取栈顶元素 int GetTop(SeqStack *stack) { if (IsEmpty(stack)) { printf('Stack is empty, cannot get top element.\n'); return -1; } return stack->data[stack->top]; // 返回栈顶元素 }
// 遍历顺序栈 void Traverse(SeqStack *stack) { if (IsEmpty(stack)) { printf('Stack is empty.\n'); return; } printf('Stack elements: '); for (int i = 0; i <= stack->top; i++) { printf('%d ', stack->data[i]); } printf('\n'); }
// 置空顺序栈 void ClearStack(SeqStack *stack) { stack->top = -1; // 栈顶指针置为-1,表示栈为空 }
int main() { SeqStack stack; int choice, element;
InitStack(&stack); // 初始化顺序栈
while (1) {
printf('1. Push element\n');
printf('2. Pop element\n');
printf('3. Get top element\n');
printf('4. Traverse stack\n');
printf('5. Clear stack\n');
printf('0. Exit\n');
printf('Enter your choice: ');
scanf('%d', &choice);
switch (choice) {
case 1:
printf('Enter element to push: ');
scanf('%d', &element);
Push(&stack, element);
break;
case 2:
Pop(&stack);
break;
case 3:
element = GetTop(&stack);
if (element != -1) {
printf('Top element: %d\n', element);
}
break;
case 4:
Traverse(&stack);
break;
case 5:
ClearStack(&stack);
break;
case 0:
exit(0);
default:
printf('Invalid choice. Please try again.\n');
break;
}
printf('\n');
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/f3yi 著作权归作者所有。请勿转载和采集!