算法————笔试内容--->栈
来源:互联网 发布:无线游戏键盘推荐知乎 编辑:程序博客网 时间:2024/06/15 19:03
栈,由两种基本操作组成,插入(推进)一个新项,和移除(弹出)一个最近插入的项。
栈有两种实现方式,一种是用数组的方式;另一种是用链表的方式;
数组实现的方式的缺点:
必须知道数组的最大长度,这样才能给数组分配内存。但是在实现栈过程中我们不知道具体该分配多大的内存,这样是用数组实现栈就会造成:
1.如果选择了一个任意大的数,这样空间是用将很低;
2.如果选择了一个较小的数,程序根本不可能运行;
如果是用链表则不会考虑长度的问题,它可以自动的增长和缩短。
下面主要介绍用链表实现栈的相关操作:
题目一:实现栈的入栈和出栈的操作。(其实就是单向链表的创建与删除的过程)
#include<stdio.h>#include<stdlib.h>//定义一个要压缩的数据结构typedef struct data{int num;data *next;} data;//定义一个栈的结构typedef struct stack{data* bottom;data* top;} stack;//初始化一个栈static stack* head;void initial_stack(){head = (stack*)malloc(sizeof(stack));head->bottom =NULL;}//压入栈的操作stack* push(int new_num){data *new_data;new_data = (data*) malloc(sizeof(data));new_data->num = new_num;//对初始化后的栈结构进行相应的处理if(head->bottom==NULL){head->top = new_data;head->bottom = new_data->next;}else{//栈内已经存入数据之后进行的相应处理new_data->next = head->top;head->top = new_data;}printf("压入%d\n",new_num);return head;}//弹出栈的操作stack* pop(){data *temp;if(head->top != head->bottom){temp = head->top->next;printf("弹出%d\n",head->top->num);free(head->top);//释放空间head->top=temp;return head;}else{return NULL;}}//主体测试函数int main(){initial_stack();for(int i=0;i<10;i++){head = push(i);}while(head=pop());system("pause");return 0;}
0 0
- 算法————笔试内容--->栈
- 算法————笔试内容--->堆与栈
- 算法————笔试内容-->链表(一)
- 算法————笔试内容--->链表(二)
- 算法————笔试内容--->队列
- 算法————笔试内容--->树(一)
- 算法————笔试内容--->红黑树(一)
- 算法————笔试内容--->二叉搜索树
- 算法————笔试内容--->红黑树(二)
- 算法————笔试内容--->红黑树(三)
- 算法——————笔试内容--->树(二)
- 笔试——编程&算法
- 【笔试/面试】—— Linux(文件内容查询)
- IT笔试经验——算法方面
- 算法与数据结构——算法题 102:1000亿条记录中查询内容(腾讯笔试题) ? 待解决
- 笔试题87.百度笔试题——页面调度算法
- 笔试题目总结之四——各种排序算法
- 2014腾讯实习生笔试——蒙特卡洛算法求圆周率
- 代码走查
- java封装TCP UDP协议
- Android Edittext 设置
- Struts2.x、Hibernate4.x、Spring4.x重点梳理
- Android模拟器无法保存数据
- 算法————笔试内容--->栈
- 上海最好的胎记医院
- 安卓系统通知栏高度
- 【DP】UVA 116 Unidirectional TSP
- HDU--1062:Text Reverse (字符串)
- cocos2d-x 3.2 TableView的使用
- 老生常谈之数据结构习题---判断某数之前所有素数
- Scala 学习笔记1(介绍)
- BlueTooth蓝牙的使用场景(二)