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
原创粉丝点击