链式储存栈的c语言源码
时间: 2023-07-29 19:14:14 浏览: 98
栈的链式表示c源代码
下面是一个使用链式储存实现的栈的C语言源码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结点
typedef struct Node {
int data; // 数据
struct Node* next; // 指向下一个结点的指针
} Node;
// 初始化栈
void initStack(Node** top) {
*top = NULL;
}
// 判断栈是否为空
int isEmpty(Node* top) {
return (top == NULL);
}
// 入栈操作
void push(Node** top, int data) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新结点
newNode->data = data;
newNode->next = *top;
*top = newNode; // 头插法插入新结点
printf("%d 入栈成功\n", data);
}
// 出栈操作
int pop(Node** top) {
if (isEmpty(*top)) {
printf("栈为空\n");
return -1; // 返回一个特殊的值表示出栈失败
}
Node* temp = *top;
int data = temp->data;
*top = temp->next;
free(temp); // 释放出栈结点的内存空间
return data;
}
// 打印栈中的元素
void printStack(Node* top) {
if (isEmpty(top)) {
printf("栈为空\n");
return;
}
printf("栈中的元素为:");
Node* temp = top;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
// 测试代码
int main() {
Node* top;
initStack(&top);
push(&top, 1);
push(&top, 2);
push(&top, 3);
printStack(top);
int data = pop(&top);
if (data != -1) {
printf("%d 出栈成功\n", data);
}
printStack(top);
return 0;
}
```
这是一个简单的链式储存栈的实现,其中包括了初始化栈、判断栈是否为空、入栈操作、出栈操作和打印栈中元素的功能。你可以根据需要进行修改和扩展。
阅读全文