编写一个C语言程序实现顺序栈的各种基本运算并在此基础上设计一个主程序完成如下功能:1 初始化顺序栈2 插入元素3 删除栈顶元素4 取栈顶元素5 遍历顺序栈6 置空顺序栈注意要点:顺序栈入栈时需判断栈是否为满栈满条件:p-top=MAXSIZE-1栈满时不能入栈否则出现空间溢出;出栈时需判断栈是否为空为空时不能操作否则产生错误。
#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/hzPE 著作权归作者所有。请勿转载和采集!