顺序栈的置空栈,判空栈,入栈,出栈,和利用顺序栈实现数值转换。代码比较冗长😁。
#include<stdio.h>
#include<stdlib.h>
#define datatype int
#define MAXSIZE 100
typedef struct
{
datatype data[MAXSIZE];
int top;
}SeqStack;
//函数声明
SeqStack *Init_SeqStack() ;
int Empty_SeqStack(SeqStack *s);
int Push_SeqStack(SeqStack *s,datatype x);
int Pop_SeqStack(SeqStack *s,datatype *a);
int Top_SeqStack(SeqStack *s,datatype *b);
void conversion(int N,int r);
int main()
{
SeqStack *h;
int x,a,b,flag,num,i;
int N,r;
h=Init_SeqStack();
printf("输入要入栈的元素(-1表示结束)\n");
scanf("%d",&x);
while( x!=-1)
{
Push_SeqStack(h,x);
scanf("%d",&x);
}
printf("输入出栈的个数:");
scanf("%d",&num);
printf("输出出栈的元素:");
for(i=0;i<num;i++)
{
Pop_SeqStack(h,&a);
printf("%d\t",a);
}
printf("\n");
flag=Top_SeqStack(h,&b);
if(flag)
{
printf("取栈顶元素:"); //上述程序结束时,top指针指向了上一个元素;
printf("%d\n",b);
}
else printf("栈已空\n");
printf("\n进制之间的转换:\n");
printf("输入N和r:\n");
scanf("%d%d",&N,&r);
h=Init_SeqStack(); //置空栈,方便使余数入栈
conversion(N,r);
return 0;
}
//置栈空算法,初始化栈
SeqStack *Init_SeqStack()
{
SeqStack *s;
s=(SeqStack*)malloc(sizeof(SeqStack));
s->top=-1; //表示空栈
return s;
}
int Empty_SeqStack(SeqStack *s) //判栈空算法,判断栈是否为空
{
if(s->top==-1) return 1;
else return 0;
}
//入栈算法,参数x是进栈的元素
int Push_SeqStack(SeqStack *s,datatype x)
{
if(s->top==MAXSIZE-1) return 0; //栈满不能入栈
else
{
s->top++; //栈顶指针上移
s->data[s->top]=x; //给栈顶赋值
return 1;
}
}
//出栈算法,参数x用来存储出栈的元素
int Pop_SeqStack(SeqStack *s,datatype *a)
{
if(Empty_SeqStack(s))return 0;
else
{
*a=s->data[s->top]; //栈顶元素存入a中
s->top--; //栈顶下移
return 1;
}
}
//取栈顶元素,参数x用来存放栈顶的元素
int Top_SeqStack(SeqStack *s,datatype *b)
{
if(Empty_SeqStack(s)) return 0; //栈空无元素
else
{
*b=s->data[s->top];
return 1;
}
}
void conversion(int N,int r) //数值转换,十进制转换成r进制
{
SeqStack *s;
datatype x;
s=Init_SeqStack();
while(N!=0)
{
Push_SeqStack(s,N%r);
N=N/r;
}
while(!Empty_SeqStack(s))
{
Pop_SeqStack(s,&x);
printf("%d",x);
}
}
运行结果:
又是熬到了深夜,头发要秃光了,蓝瘦,不过写完了程序,倒是好开心嘞,嘿嘿,晚安!
微醺的台灯跟每个晚归的美梦碰了个杯!
把怦然心动和时刻的热情都给予敲代码也是一种浪漫!
美梦醒时,又是敲代码的一天!!!