C语言中栈的建立和应用
来源:互联网 发布:securecrt mac 破解 编辑:程序博客网 时间:2024/05/17 21:50
栈的特点为:
先进后出(first in last out)。
栈中有两个指针,栈顶指针和栈尾指针。其中,栈尾指针是不动的。用栈顶指针等于栈尾指针来判定栈是否为空。压栈时,将栈顶指针+1,然后将数据存入栈顶指针所指向的位置。(先加后村或者现存后加都行;有的是栈顶指针-1)。
栈的建立与压栈出栈:
#include <stdio.h>#include <stdlib.h>#include <string.h>//栈里元素个数#defineSIZE10//栈的声明struct stack{int sta[SIZE];int top;};//栈的初始化void init_stack(struct stack* s){memset(s->sta, 0, sizeof(s->sta));s->top = -1;}//压栈int in_stack(struct stack* s, int data){if(s->top == SIZE-1){printf("the stack is full. \n");return 1;}(s->top)++;s->sta[s->top] = data;return 0;}
//出栈int out_stack(struct stack* s){int tmp;if(s->top < 0 ){printf("the stack is empty. \n");return -1;} else {tmp = (s->sta)[s->top]; (s->top)--;return tmp;}}
//栈的删除void destory(struct stack *s){s->top = -1;memset(s->sta, 0, sizeof(s->sta));}int main(){struct stack S;init_stack(&S);int i , ret ;for(i=0; i<SIZE; i++){ret = in_stack(&S, i+10);if(ret > 0){printf("in_stack err. \n");exit(1);}}for(i=0; i<SIZE; i++){ret = out_stack(&S);if(ret < 0){printf("out_stack err. \n");exit(1);}printf("%d\t", ret);}printf("\n");destory(&S);return 0;}
结果:
应用:
利用栈先进后出的特性,可以有很多应用。比如十进制转二进制这一类的进制转换,先将十进制取余所得到的数压栈,在将十进制除以2.如此循环至为0.然后将栈里元素依次取出即可。
十进制转二进制:
#include <stdio.h>#include <stdlib.h>#include <string.h>#defineSIZE32struct stack{int sta[SIZE];int top;};void init_stack(struct stack* s){memset(s->sta, 0, sizeof(s->sta));s->top = -1;}int in_stack(struct stack* s, int data){if(s->top == SIZE-1){printf("the stack is full. \n");return 1;}(s->top)++;s->sta[s->top] = data;return 0;}int out_stack(struct stack* s){int tmp;if(s->top < 0 ){//printf("the stack is empty. \n");return -1;} else {tmp = (s->sta)[s->top]; (s->top)--;return tmp;}}void destory(struct stack *s){s->top = -1;memset(s->sta, 0, sizeof(s->sta));}int ten_2_bin(struct stack* s, int ten){int tmp = ten;if(ten < 0){//将负数变成正数,同时前面加负号。ten = ~ten+1;printf("-");}if(ten == 0)in_stack(s, tmp);else {while(ten){tmp = ten%2;in_stack(s, tmp);ten = ten / 2;}}}int main(){struct stack S;init_stack(&S);int i=0 ;int ret ;ten_2_bin(&S, 4);printf("4=");while((ret = out_stack(&S)) >= 0){printf("%d", ret);}printf("\n");destory(&S);return 0;}
结果:
0 0
- C语言中栈的建立和应用
- c语言中网络连接的建立和重新建立
- C语言预处理中#和##的应用
- C语言中树的建立和遍历
- c语言中数组的内存建立
- 单链表的建立(C语言):头插法和尾插法建立单链表
- C语言中可变参数的原理和应用
- C语言中如何实现建立和写入文本文档
- 栈的建立&操作(C语言)
- C语言中独立图形程序的建立!!
- C语言中随机函数的应用
- C语言中offsetof宏的应用
- C语言中offsetof宏的应用
- C语言中offsetof宏的应用
- C语言中指针的应用
- C语言中offsetof宏的应用
- c语言中函数指针的应用
- C语言中EOF的应用
- iOS 安全模型浅析(五) ---- 挑战AppStore审核
- Java数组(Array)_基本概念_内存分析
- 【数据库】- mysql使用集锦
- 【最全,最有效】WIN7下的并行环境搭建
- 【BFS瞎搜】skiing
- C语言中栈的建立和应用
- AngularJS 路由
- 【Linux入门学习之】vi/vim编辑器必知必会
- 当 形参个数与传入参数数量不相符时,巧用arguments
- [李景山php]RHEL\CentOS 7\ubuntu16.04 下 MySQL 连接数被限制为214个
- xUtils的简单使用
- jdbc连接数据库2
- Openstack的KVM的初始化过程
- i2c设备驱动框架模型实例