顺序栈和链式栈

关于堆栈的学习,初步做了一个十进制转八进制的应用,后面还有两个事检验括号以及运算关系表达式,暂时还没有做出来(因为第一个调了好久)
第一次写blog,希望能借此成为我学习数据结构的工具,希望有大佬能指点我~

#include<stdio.h>
#include<stdlib.h>
#include<exception>

typedef struct Node
{
	int Element;
	struct Node* Next;
};

typedef struct LStack//链式存储栈
{
	Node *Top;
	int Length;
};

typedef struct Stack//顺序存储栈,先进后出
{
	int *Head;
	int Maxsize;
	int Top;
};

bool Init(Stack *S,int Maxsize)//初始化顺序栈
{
	S->Maxsize=Maxsize;
	S->Head=(int*)malloc(S->Maxsize*sizeof(int));
	S->Top=-1;
	return true;
}

bool Push(Stack *S,int Element)
{
	if(S->Top>=S->Maxsize-1)//如果当前栈已经到头了
	{
		int *p=(int*)realloc(S->Head,S->Maxsize*2*sizeof(int));//直接扩充一倍
		if(!p)
		{
			printf("OverStack...");
			return false;
		}
		S->Maxsize*=2;
		S->Top++;//前进一个位置
		S->Head[S->Top]=Element;
		return false;
	}
	else
	{
		S->Top++;
		S->Head[S->Top]=Element;
		return true;
	}
}

int Pop(Stack *S)
{ 
	if(S->Top<=-1)//如果到达了底端,退出程序
	{
		printf("Pop 你ma呢?");
		exit(1);
	}
	int Element=S->Head[S->Top];
	S->Top--;
	return Element;
}

bool LInit(LStack *S)//初始化链栈
{
	S->Top=NULL;
	S->Length=0;
	return true;
}

bool LPush(LStack *S,int Element)//链栈的压入
{
	Node *p;
	p=(Node*)malloc(sizeof(Node));
	if(!p)
		return false;
	p->Element=Element;
	p->Next=S->Top;//由于后进先出直接压入首节点
	S->Top=p;
	S->Length++;
	return true;
}

int LPop(LStack *S)//链栈的取顶
{
	int Element;
	Node *p=S->Top;
	Element=S->Top->Element;
	S->Top=S->Top->Next;
	free(p);
	S->Length--;
	return Element;
}

bool Recursion8(Stack*S,int Num)//顺序栈递归计算8进制
{
	Push(S,Num%8);//把余数压入栈中
	if((int)Num/8==0)//然后检验除数是否为0
		return true;
	Recursion8(S,(int)Num/8);//递归运算重复以上操作,直到商为0
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值