顺序栈的操作

(1)​ 定义栈的顺序存取结构。

(2)​ 分别定义顺序栈的基本操作(初始化栈、判栈空、入栈、出栈等)。

(3)​ 设计一个测试主函数进行测试。

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define size 100//定义宏,可自行修改size
/*
   顺序栈的实现
*/
typedef struct Stack
{
	int* base;//栈底指针(尾指针)
	int* top;//栈顶指针(头指针)
	int stacksize;//栈的初始空间大小
}STACK,*PSTACK;

//初始化栈
int init_stack(PSTACK p);
//入栈,压栈
int Push(PSTACK p, int e);
//遍历
void traverse_stack(PSTACK p);
//出栈
int Pop(PSTACK p, int* e);
//获取栈顶元素
int GetTop(PSTACK p, int* e);

int main(void)
{
	STACK stack;
	int val;//记录出栈元素
	int valtop;//记录栈顶元素
	init_stack(&stack);
	Push(&stack, 1);
	Push(&stack, 2);
	Push(&stack, 3);
	Push(&stack, 4);
	traverse_stack(&stack);
	Pop(&stack, &val);
	traverse_stack(&stack);
	GetTop(&stack, &valtop);
}

int init_stack(PSTACK p)
{
	p->base = (int*)malloc(size*sizeof(int));//申请size个int空间,指向base
	if (NULL == p->base)
	{
		printf("栈空间分配失败!\n");
		exit(-1);
	}
	p->top = p->base;
	p->stacksize = size;
	return 1;//1表示初始化成功
}

int Push(PSTACK p, int e)
{
	if (p->top - p->base == p->stacksize)//栈满判断
	{
		p->base = (int*)realloc(p->base, (p->stacksize + 1) * sizeof(int));
		if (NULL == p->base)
		{
			printf("栈空间分配失败!\n");
			exit(-1);
		}
		p->top = p->base + p->stacksize;//让top指向新分配的空间
		p->stacksize += 1;
	}
	*p->top++ = e;
	//*p->top = e;
	//p->top++;
	printf("%d进栈成功!\n", e);
	return 1;//1表示进栈成功
}

void traverse_stack(PSTACK p)
{
	int* pNew = p->base;
	while(pNew != p->top)
	{
		printf("%d", *pNew);
		pNew++;
	}
	printf("\n");
}

int Pop(PSTACK p, int* e)
{
	if (p->top == p->base)//栈空判断
		return 0;
	*e = *--p->top;
	printf("%d出栈成功!\n",*e);
	return 1;//1表示出栈成功
}

int GetTop(PSTACK p, int* e)
{
	if (p->top == p->base)//栈空判断
		return 0;
	*e = *(p->top - 1);
	printf("栈顶元素为:%d\n", *e);
	return 1;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值