菜鸟笔记
提升您的技术认知

数据结构-ag真人游戏

栈源代码(c语言版)

/**********实现了pop,push,empty,print,conversion等功能*********/

#include
#include
#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;
}

程序运行截图

网站地图