用c语言编写程序任意输入栈长度和栈中的元素值,构造一个链栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。
时间: 2024-11-03 19:19:30 浏览: 26
在C语言中,我们可以使用链表结构来实现栈的功能。这里是一个简单的例子,我们将创建一个链栈结构,包含节点结构体,用于存储元素值,并提供相应的操作函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链栈节点结构
typedef struct Node {
int data;
struct Node* next;
} StackNode;
// 初始化链栈
StackNode* createStack() {
return (StackNode*)malloc(sizeof(StackNode));
}
// 入栈操作
void push(StackNode** top, int value) {
StackNode* newNode = createStack();
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = *top;
*top = newNode;
}
// 出栈操作(获取并移除栈顶元素)
int pop(StackNode** top) {
if (*top == NULL) {
printf("Stack is empty.\n");
return -1; // 或者抛出异常
}
int value = (*top)->data;
StackNode* temp = *top;
*top = (*top)->next;
free(temp);
return value;
}
// 取栈顶元素但不移除
int peek(StackNode** top) {
if (*top == NULL) {
printf("Stack is empty.\n");
return -1; // 或者抛出异常
}
return (*top)->data;
}
// 清空链栈
void clear(StackNode** top) {
while (*top != NULL) {
StackNode* temp = *top;
*top = (*top)->next;
free(temp);
}
*top = NULL;
}
// 销毁链栈
void destroyStack(StackNode** top) {
if (*top) {
clear(top);
free(*top);
*top = NULL;
}
}
int main() {
StackNode* stackTop = NULL;
// 用户输入测试
int len, element;
printf("Enter stack length and elements:\n");
scanf("%d", &len);
for (int i = 0; i < len; i++) {
scanf("%d", &element);
push(&stackTop, element);
printf("Pushed %d onto the stack.\n", element);
}
printf("Stack contents: ");
while ((element = pop(&stackTop)) != -1) {
printf("%d ", element);
}
printf("\n");
printf("Stack top: %d\n", peek(&stackTop));
// 清空和销毁栈
clear(&stackTop);
printf("Stack cleared.\n");
destroyStack(&stackTop);
printf("Stack destroyed.\n");
return 0;
}
```
在这个示例中,我们首先定义了一个链栈节点结构,然后实现了`push`, `pop`, `peek`, `clear`, 和 `destroyStack` 函数。用户可以在`main`函数中输入堆栈长度和元素值,然后进行操作。
阅读全文