用C语言编写程序依次实现如下顺序栈的功能: 初始化栈s; 判断s是否为空; 依次进栈a,b,c,d; 输出栈元素及栈的长度; 释放栈
时间: 2024-12-22 15:26:23 浏览: 7
在C语言中,我们可以使用数组来实现简单的顺序栈。首先,我们需要定义一个结构体表示栈节点,并初始化栈顶指针。以下是实现上述功能的一个简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈节点结构
typedef struct Node {
int data;
struct Node* next;
} StackNode;
// 初始化栈
void initStack(StackNode** top) {
*top = (StackNode*)malloc(sizeof(StackNode));
if (*top == NULL) {
printf("Memory allocation failed.\n");
exit(1);
}
(*top)->next = NULL;
}
// 判断栈是否为空
int isEmpty(StackNode* top) {
return top->next == NULL;
}
// 进栈操作
void push(StackNode** top, int item) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
exit(1);
}
newNode->data = item;
newNode->next = *top;
*top = newNode;
}
// 出栈操作(这里仅作演示,因为顺序栈无法直接出栈)
int pop(StackNode** top) {
if (isEmpty(*top)) {
printf("Stack is empty.\n");
return -1; // 或者抛异常
} else {
int item = (*top)->data;
StackNode* temp = *top;
*top = (*top)->next;
free(temp); // 释放内存
return item;
}
}
// 输出栈元素和长度
void printStack(StackNode* top) {
StackNode* current = top;
int length = 0;
while (current != NULL) {
printf("%d ", current->data);
length++;
current = current->next;
}
printf("\nLength: %d\n", length);
}
// 释放栈空间
void destroyStack(StackNode** top) {
StackNode* temp = *top;
while (temp != NULL) {
StackNode* nextTemp = temp->next;
free(temp);
temp = nextTemp;
}
*top = NULL;
}
int main() {
StackNode* top = NULL;
// 初始化栈
initStack(&top);
// 进栈
push(&top, 'a');
push(&top, 'b');
push(&top, 'c');
push(&top, 'd');
// 输出栈元素和长度
printStack(top);
// 错误地尝试出栈
// pop(&top);
// 释放栈空间
destroyStack(&top);
return 0;
}
```
注意:这个例子中的顺序栈实际上是线性的,所以没有提供实际的出栈操作,因为顺序栈只能在栈顶添加和删除元素。如果需要真正的出栈操作,应该考虑链式存储。
阅读全文