一起创业网-为互联网创业者服务

堆栈程序怎么写

堆栈(Stack)是一种后进先出(Last-In-First-Out, LIFO)的数据结构,它允许在一端(称为栈顶)进行插入和删除操作。下面是一个简单的堆栈程序示例,使用C语言编写:

```c

include

include

define MAX_SIZE 10

// 定义堆栈结构

typedef struct {

int data[MAX_SIZE];

int top;

} Stack;

// 初始化堆栈

void initStack(Stack *s) {

s->top = -1;

}

// 判断堆栈是否为空

int isEmpty(Stack *s) {

return (s->top == -1);

}

// 将元素压入堆栈

void push(Stack *s, int value) {

if (s->top < MAX_SIZE - 1) {

s->data[++(s->top)] = value;

} else {

printf("Stack is full. Cannot push %d\n", value);

}

}

// 从堆栈中弹出元素

int pop(Stack *s) {

if (!isEmpty(s)) {

return s->data[(s->top)--];

} else {

printf("Stack is empty. Cannot pop.\n");

return -1; // 返回一个错误码

}

}

// 查看栈顶元素

int peek(Stack *s) {

if (!isEmpty(s)) {

return s->data[s->top];

} else {

printf("Stack is empty. No top element to peek.\n");

return -1; // 返回一个错误码

}

}

// 销毁堆栈

void destroyStack(Stack *s) {

// 释放堆栈占用的内存

free(s);

}

int main() {

Stack stack;

initStack(&stack);

int choice, value;

do {

printf("1. Push\n2. Pop\n3. Peek\n4. Is Empty\n5. Is Full\n6. Exit\n");

printf("Enter your choice: ");

scanf("%d", &choice);

switch (choice) {

case 1:

printf("Enter value to push: ");

scanf("%d", &value);

push(&stack, value);

break;

case 2:

value = pop(&stack);

if (value != -1) {

printf("Popped value: %d\n", value);

}

break;

case 3:

value = peek(&stack);

if (value != -1) {

printf("Top value: %d\n", value);

}

break;

case 4:

if (isEmpty(&stack)) {

printf("Stack is empty.\n");

} else {

printf("Stack is not empty.\n");

}

break;

case 5:

if (isEmpty(&stack)) {

printf("Stack is empty.\n");

} else {

printf("Stack is full.\n");

}

break;

case 6:

printf("Exiting stack operations.\n");

break;

default:

printf("Invalid choice. Please try again.\n");

}

} while (choice != 6);

destroyStack(&stack);

return 0;

}

```

这个程序定义了一个堆栈结构,并实现了初始化、压栈、弹栈、查看栈顶元素、判断栈是否为空或已满以及销毁堆栈等基本操作。在`main`函数中,通过一个循环菜单让用户选择执行不同的堆栈操作,直到用户选择退出程序。

请注意,这个示例中的堆栈使用固定大小的数组实现,因此它的大小是有限的。在实际应用中,你可能需要根据需求选择不同的实现方式,例如使用动态数组或链表来实现堆栈,以便能够处理不同大小的输入。