题目:实现顺序栈、链栈的各种基本运算的算法。 (2)任务:首先分别实现顺序栈、链栈的各种基本运算;其次设计程序调用顺序栈、链栈的这些算法进行功能测试。 用c语言生成一个可运行的代码
时间: 2024-12-08 16:17:25 浏览: 16
顺序栈和链栈都是数据结构中常见的栈实现方式,下面我会为你简述它们的基本操作,并提供C语言的简单实现。
**1. 顺序栈(数组实现)**
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int top;
int data[MAX_SIZE];
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int is_empty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
void push(Stack *s, int item) {
if (is_full(s)) {
printf("Stack is full.\n");
return;
}
s->data[++s->top] = item;
}
// 出栈操作
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty.\n");
return -1;
}
return s->data[s->top--];
}
// 获取栈顶元素
int peek(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty.\n");
return -1;
}
return s->data[s->top];
}
```
**2. 链栈(链表实现)**
```c
#include <stdio.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct {
Node* top;
} Stack;
// 初始化链栈
void init(Stack *s) {
s->top = NULL;
}
// 添加节点到链栈顶部
void push(Stack *s, int item) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = item;
newNode->next = s->top;
s->top = newNode;
}
// 删除并返回栈顶元素
int pop(Stack *s) {
if (s->top == NULL) {
printf("Stack is empty.\n");
return -1;
}
Node* temp = s->top;
s->top = s->top->next;
free(temp);
return temp->data;
}
// 获取栈顶元素,但不删除
int peek(Stack *s) {
if (s->top == NULL) {
printf("Stack is empty.\n");
return -1;
}
return s->top->data;
}
```
为了测试这两个栈的数据结构,你可以编写一个主函数,创建两个栈实例,然后进行入栈、出栈、查看栈顶等操作。记得处理好边界情况和错误提示。
**测试示例:**
```c
Stack seqStack, linkStack;
init(&seqStack);
init(&linkStack);
// 测试顺序栈
push(&seqStack, 1);
push(&seqStack, 2);
printf("Peek from seqStack: %d\n", peek(&seqStack));
// 测试链栈
push(&linkStack, 3);
push(&linkStack, 4);
printf("Peek from linkStack: %d\n", peek(&linkStack));
// ...更多测试...
// 清理内存
free(linkStack.top);
free(seqStack.data);
```
阅读全文