栈的详解:数据结构——栈_慢慢~漫漫的博客-CSDN博客
#include#include #define stack_init_size 10 #define STACKSIZE 10 //定义栈结构 typedef struct { int *base; //栈底 int *top; //栈顶 int stacksize; //栈的内存 }SqStack; //初始化栈 void InitStack(SqStack * s) { s -> base = (int *)malloc (stack_init_size * sizeof(int)); //动态开辟空间给栈 if(!s->base) exit(0); s->top = s->base; s->stacksize = stack_init_size; } //压栈 void Push(SqStack * s , int e) { if(s->top - s->base == s->stacksize) { //如果栈的内存不够,就为它扩容 s->base = (int *) realloc(s->base,(s->stacksize + STACKSIZE)*sizeof(int)); if(!s->base) exit(0); s->top = s->base + s->stacksize;//扩容后的新栈顶 s->stacksize+=STACKSIZE;//扩容后的新空间 } *s -> top = e; s -> top++; } //出栈 int Pop(SqStack * s) { int e; if(s->top == s->base) { printf("栈已空!n"); exit(0); } s -> top--; e = *s->top; return e; } //判断栈是否为空 int EmptyStack(SqStack s) { if(s.top == s.base) return 1; else return 0; } //置空栈 void ClearStack(SqStack * s) { s -> top = s -> base; } //打印栈 void PrintStack(SqStack s) { while(!EmptyStack(s)) //这里相当于while(EmptyStack(s) == 0),根据Empty函数,当等于0的时候,说明栈不空 { s.top--; printf("%d ",*s.top); } printf("nn"); } //进制转化函数 void conversion(int N , int d) { SqStack M; InitStack(&M); printf("你输入的数值%d转换成%d进制后为: ",N,d); while(N) { Push(&M,N%d); //取余数,压入栈中 N = N/d; //取除数 } while(!EmptyStack(M)) { PrintStack(M); //打印栈 break; } printf("n"); } //主函数 int main() { SqStack M; int x,y,c,i,j; InitStack(&M); printf("—栈已初始化—nn"); printf("请输入你要进行的操作:n"); printf("********************************"); printf("n*****1.入栈 2.出栈****n"); printf("*****3.进制转化 4.退出****n"); printf("********************************nn"); //这里是个小菜单 scanf("%d", &x); while(x!=0) { switch(x) { case 1:printf("请输入要入栈的数值: n"); scanf("%d",&y); Push(&M,y); PrintStack(M); break; case 2:printf("出栈的数值为: "); c = Pop(&M); printf("%dn",c); //栈中弹出来的数给c。再把c打印一下 PrintStack(M); break; case 3:printf("请输入要转换的数值和进制:n"); scanf("%d%d",&i,&j); conversion(i,j); break; case 4:exit(0); break; default:printf("输入有误,请重新输入: n"); } printf("********************************"); printf("n*****1.入栈 2.出栈****n"); printf("*****3.进制转化 4.退出****n"); printf("********************************nn"); scanf("%d", &x); } return 0; }



