数据结构
本系列是C语言学完的基础上,对数据结构的一些练习,代码偏多。
注意啦:每日一看
数据结构:
1.逻辑结构(关系)线性结构:线性表 **栈** 队列 非线性结构: 树 图
2.存储结构:
**顺序存储** 链式存储
注意啦:以下是本人介绍哦
📕作者简介:S学长,致力于C/C++、嵌入式。从事嵌入式行业,热爱健身,身体倍棒的一位博主。
📗本文收录于爱上Linux系列,大家有兴趣的可以看一看
📘相关专栏C语言嵌入式开发、C语言入门系列等,日常Bug集期待你的指导。
📙S学长爱上Linux系列正在发展中,喜欢嵌入式的朋友们可以关注一下哦!
顺序栈
1.1 数据类型
代码示例:
typedef struct seqstakc{
datatype data[SIZE];
int top; //表示栈顶数据下标
}seq_stack,*seq_pstack;
2.功能函数
2.1 初始化
void seqstack_init(seq_pstack * S)
{
*S = (seq_pstack)malloc(sizeof(seq_stack));
if(NULL == *S){
perror("malloc");
exit(1);
}
(*S)->top = -1;
2.2 入栈
判断栈是否已满,top 先++,再将数据放入数组中。
bool seqstack_push(seq_pstack s,datatype data)
{
//判断栈是否满
if(seqstack_is_full(s)){
printf("栈已满\n");
return false;
}
s->top++;
s->data[s->top] = data;
return true;
}
2.3 出栈
判空,取数据,top–
bool seqstack_pop(seq_pstack s,datatype *D)
{
//判断栈是否空
if(seqstack_is_empty(s)){
printf("栈为空\n");
return false;
}
*D = s->data[s->top];
s->top--;
return true;
}
测试:输入数据压入,输入字符弹出。
切记要用,getchar()清空缓冲区。
while(1){
printf("请输入整数:");
ret = scanf("%d",&data);//整数可以取到,其余跳过,留在缓冲区
if(ret){
//输入整数,入栈
if(seqstack_push(s,data))
seqstack_travel(s);
else
printf("入栈失败\n");
}else{
//输入字符,出栈 没有获取到整数
if(seqstack_pop(s,&data))
printf("出栈-->%d\n",data);
seqstack_travel(s);
while(getchar() != '\n'); //清空输入缓冲区
}
}
编写Makefile
CC = gcc
CFLAGS= -Wall -g -O0
SRC = ${wildcard *.c}
APP = test
$(APP) : $(SRC)
$(CC) $(CFLAGS) -o $@ $^
clean:
$(RM) $(APP)
运行结果
练习:用栈进行数据的进制转换
如果这份博客对大家有帮助,希望各位给S学长一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给S学长的意见,欢迎评论区留言。