设计一个C语言代码,包含顺序栈输入和链式栈输入,两者都可多个元素输入;并且两者都可以多个元素输出,
时间: 2024-10-21 21:17:43 浏览: 13
设计一个C语言程序,我们可以创建两个数据结构:顺序栈(基于数组)和链式栈(基于链表)。首先,我们分别构建它们的基本结构:
**顺序栈 (基于数组)**
```c
#include <stdio.h>
#define MAX_SIZE 10
typedef struct {
int top;
int data[MAX_SIZE];
} Stack;
// 初始化栈
void init(Stack *stack) {
stack->top = -1;
}
// 判断栈是否为空
int is_empty(Stack *stack) {
return stack->top == -1;
}
// 入栈操作 (顺序)
void push(Stack *stack, int value) {
if (is_full(stack)) {
printf("Stack is full.\n");
return;
}
stack->data[++stack->top] = value;
}
// 出栈操作 (顺序)
int pop(Stack *stack) {
if (is_empty(stack)) {
printf("Stack is empty.\n");
return -1; // 返回错误代码
}
return stack->data[stack->top--];
}
// 显示栈内容 (顺序)
void print_stack(Stack *stack) {
for (int i = stack->top; i >= 0; i--) {
printf("%d ", stack->data[i]);
}
printf("\n");
}
```
**链式栈 (基于链表)**
```c
#include <stdio.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct {
Node* top;
} LinkStack;
// 初始化链式栈
void init_LinkStack(LinkStack *stack) {
stack->top = NULL;
}
// 判断链式栈是否为空
int is_empty(LinkStack *stack) {
return stack->top == NULL;
}
// 入栈操作 (链式)
void push_LinkStack(LinkStack *stack, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = stack->top;
stack->top = newNode;
}
// 出栈操作 (链式)
int pop_LinkStack(LinkStack *stack) {
if (is_empty(stack)) {
printf("Stack is empty.\n");
return -1;
}
Node* temp = stack->top;
stack->top = stack->top->next;
free(temp);
return temp->data;
}
// 显示链式栈内容
void print_LinkStack(LinkStack *stack) {
Node* current = stack->top;
while (current != NULL) {
printf("%d ->", current->data);
current = current->next;
}
printf("NULL\n");
}
```
这两个函数可以让你分别对顺序栈和链式栈进行元素的插入、删除和查看。为了完成整个功能,你可以按照需要编写主函数,在那里接收用户输入并选择栈的数据结构。
阅读全文