您的位置:首页 > 理论基础 > 数据结构算法

数据结构——栈——2016_11_21

2016-11-21 21:35 204 查看
栈源代码(C语言版)

/**********实现了Pop,Push,Empty,Print,conversion等功能*********/

#include<stdio.h>
#include<stdlib.h>
#define stack_init_size 10
#define STACKINCREMENT 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+STACKINCREMENT)*sizeof(int));
if(!s->base)
exit(0);
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREMENT;
}
*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)){
s.top--;
printf("%d  ",*s.top);
}
printf("\n\n");
}
//进制转换函数
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,z,i,j;
InitStack(&M);
printf("——栈已初始化完成——\n\n\n");
printf("请输入要操作的序号:\n");
printf("1·入栈 2·出栈 3·进制转换 4·退出\n");
scanf("%d",&x);
while(x!=0){
switch(x){
case 1:printf("请输入要入栈的数值:\n");
scanf("%d",&y);
Push(&M,y);
PrintStack(M);
break;
case 2:printf("出栈的数值为:");
z=Pop(&M);
printf("%d\n",z);
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("1·入栈 2·出栈 3·进制转换 4·退出\n");
scanf("%d",&x);
}
return 0;
}


程序运行截图



    联系邮箱:xhsgg12302@outlook.com

                                                                                         2016_11_21
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: