实现功能:
- 创建栈
- 入栈
- 出栈
- 遍历栈
代码实现:
//栈:先进后出,使用单链表实现栈
#include <stdio.h>
#include <stdlib.h>
//定义栈的结构体
typedef struct node_st
{
int data; //数据域
struct node_st *next;//指针域
}stack;
/*函数声明部分*/
stack *stack_create(); //栈的创建
void stack_push(stack *head,int data);//入栈
int stack_pop(stack *head); //出栈
void stack_print(stack *head); //栈的遍历
int main()
{
stack *head = stack_create(); //创建栈
stack_push(head,1); //入栈
stack_push(head,2);
stack_push(head,3);
stack_push(head,4);
stack_print(head); //遍历栈
printf("pop = %d\n",stack_pop(head)); //出栈
stack_print(head);
return 0;
}
/*函数实现部分*/
//栈的创建
stack *stack_create()
{
stack *head = malloc(sizeof(*head)); //栈顶节点
head->data = 0;
head->next = NULL;
return head;
}
//入栈,头插法
void stack_push(stack *head,int data)
{
stack *new = malloc(sizeof(*new));
new->data = data;//新节点的数据
new->next = head->next;//新节点的后继指针指向第1个有效节点
head->next = new; //头节点的后继指针指向新节点
head->data++; //有效节点数+1
}
//出栈,删除第1个有效节点
int stack_pop(stack *head)
{
if(head->data == 0)//栈为空
{
return 0;
}
else
{
stack *node = head->next;//第1个有效节点
int data = node->data; //保存出栈的数据
head->next = node->next;//头节点的指针指向出栈的下1节点
free(node); //释放内存
head->data--;//有效节点数-1
return data; //返回出栈的数据
}
}
//栈的遍历
void stack_print(stack *head)
{
stack *node = head->next;
while(node)
{
printf("%d->",node->data);
node = node->next;
}
printf("NULL\n");
}
运行结果: