题目:实现顺序栈、链栈的各种基本运算的算法。 (2)任务:首先分别实现顺序栈、链栈的各种基本运算;其次设计程序调用顺序栈、链栈的这些算法进行功能测试。 用c语言实现一下
时间: 2024-12-08 20:17:20 浏览: 55
在C语言中,我们可以分别用数组(顺序存储)和链表(动态存储)来实现顺序栈和链栈。以下是简化的C语言代码示例:
1. 顺序栈(基于数组)
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} StackArray;
// 初始化栈
void init(StackArray *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(StackArray *s) {
return (s->top == -1);
}
// 向栈顶压入元素
void push(StackArray *s, int value) {
if (s->top < MAX_SIZE - 1) {
s->data[++s->top] = value;
} else {
printf("Stack overflow!\n");
}
}
// 从栈顶弹出元素
int pop(StackArray *s) {
if (!isEmpty(s)) {
return s->data[s->top--];
} else {
printf("Stack underflow!\n");
return -1; // 返回错误代码
}
}
// 打印栈顶元素
int peek(StackArray *s) {
return isEmpty(s) ? -1 : s->data[s->top];
}
2. 链栈(基于链表)
#include <stdio.h>
typedef struct Node {
int data;
struct Node* next;
} StackLink;
// 创建新节点
struct Node* createNode(int value) {
StackLink* newNode = (StackLink*)malloc(sizeof(StackLink));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 初始化链栈
void init(StackLink **top) {
*top = NULL;
}
// 添加元素到链栈顶部
void push(StackLink **top, int value) {
StackLink* newNode = createNode(value);
newNode->next = *top;
*top = newNode;
}
// 删除并返回链栈顶部元素
int pop(StackLink **top) {
if (*top != NULL) {
StackLink* temp = *top;
int val = temp->data;
*top = temp->next;
free(temp); // 释放内存
return val;
} else {
printf("Stack is empty.\n");
return -1;
}
}
// 查看链栈顶部元素但不删除
int peek(StackLink **top) {
return (*top != NULL) ? (*top)->data : -1;
}
接下来,你可以设计一个主函数,通过创建栈对象,并调用上述函数来进行测试。例如:
int main() {
StackArray seqStack;
StackLink* linkStack = NULL;
// 初始化栈
init(&seqStack.top);
init(&linkStack);
// 测试操作
push(&seqStack, 1);
push(&seqStack, 2);
push(linkStack, 3);
printf("Peek from sequence stack: %d\n", peek(&seqStack));
printf("Peek from linked stack: %d\n", peek(&linkStack));
printf("Pop from sequence stack: %d\n", pop(&seqStack));
printf("Pop from linked stack: %d\n", pop(linkStack));
// ...更多测试...
return 0;
}
相关推荐


















