顺序栈的基本操作

顺序栈的置空栈,判空栈,入栈,出栈,和利用顺序栈实现数值转换。代码比较冗长😁。

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

运行结果:
在这里插入图片描述
又是熬到了深夜,头发要秃光了,蓝瘦,不过写完了程序,倒是好开心嘞,嘿嘿,晚安!
微醺的台灯跟每个晚归的美梦碰了个杯!
把怦然心动和时刻的热情都给予敲代码也是一种浪漫!
美梦醒时,又是敲代码的一天!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值