厦门旅游网站建设目的哈尔滨网站设计哪里有做
news/
2025/9/30 9:25:47/
文章来源:
厦门旅游网站建设目的,哈尔滨网站设计哪里有做,wordpress 免费插件,怎样才能做好网络推广什么是数据结构#xff1f;数据结构是什么#xff1f;要了解数据结构#xff0c;我们要先明白数据和结构#xff0c;数据就是一些int char 这样的变量#xff0c;这些就是数据#xff0c;如果你是一个篮球爱好者#xff0c;那么你的球鞋就是你的数据#xff0c;结构就是… 什么是数据结构数据结构是什么要了解数据结构我们要先明白数据和结构数据就是一些int char 这样的变量这些就是数据如果你是一个篮球爱好者那么你的球鞋就是你的数据结构就是怎么把这些数据排列组合怎么把数据摆放好才能方便你找到这些数据把数据和结构合在一起理解就是所谓的数据结构简单点就是处理数据的方式方法。平时在家里面你有没有随便摆放自己的鞋子然后要找鞋子的时候要花费非常多是时间可能你老婆也很生气每天都乱摆鞋子导致她打扫卫生非常麻烦然后有一天你买了一个非常酷的鞋架有了这个鞋架之后你的鞋子终于有家了这个鞋架就是起到处理鞋子的作用了。什么是栈栈可以理解为数据结构中的一种这种数据结构的特点是先进去的人「数据」后出来就像下面的图片一样如果栈是一个洞人「数据」只能从洞的一个口进去然后出来也只能从一个口出来而且洞的宽度就只能容纳一个人「数据」好了那先进去的那个人「数据」最傻逼了一定要等后面进来的人「数据」都先出去了才能出去。用C 语言实现一个栈我写代码是很水的之前有一个同学写了一个栈让我检查我看了下好像我写代码的能力比他厉害一些代码比较简单然后讲一下几个比较重要的函数希望大家在面试的时候随手就甩出一个栈砸死面试官哈哈。#include stdio.h
#include stdlib.hstruct List{int data;struct List * next;
};struct Stack{struct List *head;int size;
};struct Stack * StackInit(void)
{struct Stack *stack NULL;stack (struct Stack*)malloc(sizeof(struct Stack));stack-head (struct List *)malloc(sizeof(struct List));stack-head-next NULL;stack-size 0;return stack;
}int StackPush(struct Stack *stack,int data)
{struct List *tmp (struct List *)malloc(sizeof(struct List));tmp-data data;tmp-next stack-head-next;stack-head-next tmp;stack-size;//printf(push:%d \n,data);return 0;
}int IsStackEmpty(struct Stack *stack)
{/*如果头指针指向下一个为空说明栈为空*/if(stack-head-next NULL)return 1;elsereturn 0;
}int StackPop(struct Stack *stack,int *data)
{struct List *tmp NULL;if(IsStackEmpty(stack))return -1;tmp stack-head-next;*data tmp-data;stack-head-next tmp-next;stack-size--;free(tmp);//printf(pop:%d \n,*data);return 0;
}int main(void)
{int i 0;struct Stack *stack NULL;stack StackInit();for(i 0;i5;i){StackPush(stack,i);}for(i 0;i5;i){int data 0;StackPop(stack,data);printf(%d ,data);}printf(\n);return 0;
}
1-栈头部栈头部也就是栈顶指针我们用指针单链表实现一个栈一定要知道这个栈顶的指针有头就有栈没有头这个栈也就跨了。struct Stack *stack NULL;stack StackInit();
这个就是定义一个栈也就是malloc出来一个内存专门存这个栈顶的。2-出栈出栈的方法跟我之前说的差不多只不过出栈代码上需要做判断。int StackPop(struct Stack *stack,int *data)
{struct List *tmp NULL;if(IsStackEmpty(stack))return -1;tmp stack-head-next;*data tmp-data;stack-head-next tmp-next;stack-size--;free(tmp);//printf(pop:%d \n,*data);return 0;
}
先判断这个栈是不是空的是不是空的判断方法就是通过判断head-next的指针是否为空。然后把head-next 这个位置的数据取出来取出来后再把head-next的指针指向 取出来这个位置 的next 位置。然后再记得free掉。就Ok了。3-入栈入栈的操作和出栈的操作刚好相反就是改变一下位置和指针的指向。int StackPush(struct Stack *stack,int data)
{struct List *tmp (struct List *)malloc(sizeof(struct List));tmp-data data;tmp-next stack-head-next;stack-head-next tmp;stack-size;//printf(push:%d \n,data);return 0;
}用数组来实现一个栈数组本身是一种数据结构使用数组实现一个栈也是非常简单方便的大家请看。#include stdio.h
#include stdlib.h/*栈的大小*/
#define LENGHT (100)struct Stack{int stack_array[LENGHT];unsigned int size;//栈动态长度
};struct Stack * StackInit(void)
{struct Stack *stack NULL;stack (struct Stack*)malloc(sizeof(struct Stack));stack-size 0;return stack;
}int StackPush(struct Stack *stack,int data)
{if(stack-size LENGHT){printf(stack is full\n);return (-1);}stack-stack_array[stack-size] data;stack-size;//printf(push:%d size:%d\n,data,stack-size);return 0;
}int IsStackEmpty(struct Stack *stack)
{/*如果头指针指向下一个为空说明栈为空*/if(stack-size 0)return 1;elsereturn 0;
}int StackPop(struct Stack *stack,int *data)
{stack-size--;if(IsStackEmpty(stack))return -1;*data stack-stack_array[stack-size];//printf(pop:%d size:%d\n,*data,stack-size);return 0;
}int main(void)
{int i 0;struct Stack *stack NULL;stack StackInit();for(i 0;i20;i){StackPush(stack,i);}for(i 0;i21;i){int data 0;StackPop(stack,data);printf(%d \n,data);}printf(\n);return 0;
}
总结既然有栈就会有和栈不一样的数据结构有一种数据结构叫做队列栈的数据结构特点是先进后出队列的数据结构特点是先进先出有点意思栈和队列做驱动的同学很少需要自己写代码实现正常情况下都是SDK集成了方法直接调用接口就好了但是写应用的同学经常要自己实现一个栈或者队列特别是大企业面试这些算是非常基础的题目最好是闭着眼睛就能写出来的那种。扫码或长按关注回复「 加群 」进入技术群聊
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922648.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!