# 链式栈的操作及实现(C语言)

## 链式栈的操作及实现

代码如下.

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
int data;               //数据域
struct node* next;      //指针域
}node;

//创建节点
node* create_node()
{
node* p = (node*)malloc(sizeof(node));
p->data = -1;
p->next = NULL;
return p;
}

//创建栈
node* link_stack(int d[],int size)
{
node* base = create_node();
node* top = base;
int i;
for(i = 0;i < size;i++)
{
node* p = (node*)malloc(sizeof(node));
p->data = d[i];
p->next = NULL;
top->next = p;
top = p;
}
return base;
}

//获取top指针
node* get_top(node* base)
{
node* p = base;
for(;p->next != NULL;)
{
p = p->next;
}
return p;
}

//入栈
void push_stack(node* base,int element)
{
node* top = get_top(base);
node* p = create_node();
top->next = p;
p->data = element;
}

//出栈
int pop_stack(node* base)
{
node* top = get_top(base);
node* p = base;
for(;p->next->next != NULL;)
{
p = p->next;
}
p->next = NULL;
int data = top->data;
free(top);
return data;
}

//判断栈是否为空
int isempty(node* base)
{
if(base->next == NULL)
return 0;
return 1;
}

//删除栈
void delete_stack(node* base)
{
for(;isempty(base);)
pop_stack(base);
free(base);
printf("栈已删除!");
}

//返回栈顶元素(不出栈)
int get_top_element(node* base)
{
node* top = get_top(base);
}

int main()
{
int a[5] = {1,2,3,4,5};
int size_ = sizeof(a)/sizeof(int);
printf("创建链式栈\n");
node *p = link_stack(a,size_);         //创建链式栈1

printf("%d\n",pop_stack(p));           //出栈
push_stack(p,999);                     //入栈
printf("%d\n",get_top_element(p));     //返回栈顶元素
delete_stack(p);                       //删除栈
return 0;
}

• 0
点赞
• 0
评论
• 1
收藏
• 打赏
• 扫一扫，分享海报

05-27
04-09 9120

03-06 1万+
05-14 4167
10-27
03-25 3348
04-18 5755
06-25 1977
03-16 361
06-30 6558
©️2022 CSDN 皮肤主题：数字20 设计师：CSDN官方博客

¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。