C语言顺序栈实现及操作示例:入栈、出栈、遍历等
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int top;
} SeqStack;
// 初始化顺序栈
void InitStack(SeqStack *s) {
s->top = -1;
}
// 判断栈是否为空
int IsEmpty(SeqStack *s) {
return s->top == -1;
}
// 判断栈是否为满
int IsFull(SeqStack *s) {
return s->top == MAXSIZE - 1;
}
// 入栈
void Push(SeqStack *s, int item) {
if (IsFull(s)) {
printf('Stack is full\n');
return;
}
s->data[++s->top] = item;
}
// 出栈
void Pop(SeqStack *s) {
if (IsEmpty(s)) {
printf('Stack is empty\n');
return;
}
s->top--;
}
// 取栈顶元素
int Top(SeqStack *s) {
if (IsEmpty(s)) {
printf('Stack is empty\n');
return -1;
}
return s->data[s->top];
}
// 遍历栈
void Traverse(SeqStack *s) {
if (IsEmpty(s)) {
printf('Stack is empty\n');
return;
}
for (int i = 0; i <= s->top; i++) {
printf('%d ', s->data[i]);
}
printf('\n');
}
// 置空栈
void ClearStack(SeqStack *s) {
s->top = -1;
}
int main() {
SeqStack s;
int choice, item;
InitStack(&s);
while (1) {
printf('1. Push\n');
printf('2. Pop\n');
printf('3. Top\n');
printf('4. Traverse\n');
printf('5. ClearStack\n');
printf('0. Exit\n');
printf('Enter your choice: ');
scanf('%d', &choice);
switch (choice) {
case 0:
exit(0);
case 1:
printf('Enter the item to push: ');
scanf('%d', &item);
Push(&s, item);
break;
case 2:
Pop(&s);
break;
case 3:
item = Top(&s);
if (item != -1) {
printf('Top element: %d\n', item);
}
break;
case 4:
Traverse(&s);
break;
case 5:
ClearStack(&s);
break;
default:
printf('Invalid choice\n');
break;
}
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/f3yl 著作权归作者所有。请勿转载和采集!