用c语言编写两个栈,实现存储结构,初始化,入栈,出栈,main函数打印
时间: 2024-10-18 13:21:42 浏览: 36
在C语言中,我们可以分别使用数组和链表来实现两个栈的数据结构。这里我们将演示如何使用数组和链表各自来构建栈,并实现基本操作。
**一、基于数组的栈(Fixed Stack)**
```c
#include <stdio.h>
#define MAX_SIZE 10
typedef struct {
int top;
int stack[MAX_SIZE];
} ArrayStack;
void init(Stack *s) { s->top = -1; }
int is_empty(Stack *s) { return s->top == -1; }
void push(Stack *s, int value) {
if (is_full(s)) return;
s->stack[++s->top] = value;
}
int pop(Stack *s) {
if (is_empty(s)) return -1;
return s->stack[s->top--];
}
void print(Stack *s) {
for (int i = 0; i <= s->top; ++i) {
printf("%d ", s->stack[i]);
}
printf("\n");
}
// 主函数演示
int main() {
ArrayStack arrStack;
init(&arrStack);
// 入栈和出栈示例
push(&arrStack, 5);
push(&arrStack, 10);
print(&arrStack); // 打印数组栈内容
printf("Popped element: %d\n", pop(&arrStack));
return 0;
}
```
**二、基于链表的动态栈(Dynamic Stack)**
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct {
Node* top;
} LinkStack;
void init(Stack *s) { s->top = NULL; }
int is_empty(Stack *s) { return s->top == NULL; }
void push(Stack *s, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = s->top;
s->top = newNode;
}
int pop(Stack *s) {
if (is_empty(s)) return -1;
Node* temp = s->top;
s->top = s->top->next;
free(temp);
return temp->data;
}
void print(Stack *s) {
Node* curr = s->top;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
}
// 主函数演示
int main() {
LinkStack linkStack;
init(&linkStack);
// 入栈和出栈示例
push(&linkStack, 5);
push(&linkStack, 10);
print(&linkStack); // 打印链表栈内容
printf("Popped element: %d\n", pop(&linkStack));
return 0;
}
```
阅读全文