算法————笔试内容--->栈

来源:互联网 发布:无线游戏键盘推荐知乎 编辑:程序博客网 时间: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
原创粉丝点击