文章目录
- 🍊自我介绍
- 🍊链式栈
- 入栈和出栈
- linkstack.h
- linkstack.c
你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~
🍊自我介绍
Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾” 和“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入式方面的内容。
🍊链式栈
概念:
链式栈:插入操作和删除操作均在链表头部进行,链表尾部就是栈底,栈顶指针就是头指针。
图形:
链式栈的本质:栈头 + 不带头结点的链表
设计说明:
先设计结点类型,再设计栈头类型;top保存的是结点首地址.
结点设计和栈头设计代码
typedef char data_t;
//结点类型
typedef struct node
{
data_t data;
struct node *next;
}linknode_t;
//栈头类型
typedef struct
{
//栈顶指针
linknode_t *top;
//记录当前栈中元素个数
int n;
}linkstack_t;
入栈和出栈
linkstack.h
#ifndef __LINKSTACK_H__
#define __LINKSTACK_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef char data_t;
//结点类型
typedef struct node
{
data_t data;
struct node *next;
}linknode_t;
//栈头类型
typedef struct
{
//栈顶指针
linknode_t *top;
//记录当前栈中元素个数
int n;
}linkstack_t;
extern linkstack_t *create_empty_linkstack();
extern int is_empty_linkstack(linkstack_t *s);
extern void push_linkstack(linkstack_t *s,data_t data);
extern data_t pop_linkstack(linkstack_t *s);
extern data_t pop_linkstack(linkstack_t *s);
#endif
linkstack.c
#include "linkstack.h"
//创建空的链式栈——为栈头在堆区分配空间
linkstack_t *create_empty_linkstack()
{
linkstack_t *s = NULL;
s = (linkstack_t *)malloc(sizeof(linkstack_t));
if(NULL == s)
{
printf("malloc is fail!\n");
return NULL;
}
memset(s,0,sizeof(linkstack_t));
return s;
}
//判断栈是否为空
int is_empty_linkstack(linkstack_t *s)
{
return s->top == NULL ? 1 : 0;
}
//入栈
void push_linkstack(linkstack_t *s,data_t data)
{
linknode_t *temp = NULL;
temp = (linklist_t *)malloc(sizeof(linknode_t));
if(NULL == temp)
{
printf("malloc is fail!\n");
return ;
}
temp->data = data;
//插入数据类似于链表的头插法
temp->next = s->top;
s->top =temp;
//更新n的值
s->n ++;
return ;
}
//出栈
data_t pop_linkstack(linkstack_t *s)
{
linknode_t *temp = NULL;
data_t data;
//保存要删除结点的地址
temp = s->top;
//取出数据
data = temp->data;
//更新指针信息
s->top = temp->next;
//释放temp结点
free(temp);
temp = NULL;
//更新n的值
s->n --;
return data;
}
//输出栈顶元素的值
data_t get_top_data(linkstack_t *s)
{
return s->top->data;
}
main.c
#include "linkstack.h"
int main()
{
linkstack_t *s = NULL;
data_t arry[] = {'a','n','i','h','c'};
int i;
s = create_empty_linkstack();
for(i = 0;i < sizeof(arry)/sizeof(arry[0]);i++)
{
push_linkstack(s,arry[i]);
}
printf("Top data = %c\n",get_top_data(s));
while(!is_empty_linkstack(s))
{
printf("%c",pop_linkstack(s));
}
printf("\n");
return 0;
}