堆栈的基础实现C

数组单向

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

typedef struct 
{
	int data[10];
	int top;
}stack;

void push(stack*p, int a);
void pop(stack* p);

int main(int argc, char const*argv[])
{
	stack* p = (stack*)malloc(sizeof(stack));
	p->top = -1;
	push(p, 10);
	pop(p);

void push(stack* p, int a)
{
	//判断是否栈满
	if (p->top==9)
	{
		printf("栈满了\n");
	}
	else
	{
		p->top++;
		p->data[p->top] = a;
		printf("%d已入栈\n", a);
	}
}

void pop(stack* p)
{
	//判断是否栈空
	if (p->top==-1)
	{
		printf("栈空了\n");
	}
	else
	{
		printf("%d已出栈\n", p->data[p->top]);
		p->top--;
	}
}

数组双向

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

typedef struct
{
	int date[10];
	int top1;
	int top2;
}stack;

void push(stack*p, int a, int tag);
void pop(stack*p, int tag);

int main(int argc, char const* argv[])
{
	stack* p = (stack*)malloc(sizeof(stack));
	p->top1 = -1;
	p->top2 = 10;
	push(p, 9, 1);
	pop(p, 2);

}
void push(stack* p, int a, int tag)
{
	//判断栈满
	if (p->top2-p->top1==1)
	{
		printf("栈满了,别放了\n");
		return;
	}
	if (tag==1)
	{
		p->top1++;
		p->date[p->top1] = a;
		printf("%d已经入栈%d了\n", a, tag);
	}
	else
	{
		p->top2--;
		p->date[p->top2] = a;
		printf("%d已经入栈%d了\n", a, tag);
	}
}

void pop(stack* p, int tag)
{
	//判断是否栈空
	if (tag==1)
	{
		if (p->top1==-1)
		{
			printf("栈空了\n");
			return;
		}
		else
		{
			printf("%d已经出栈%d了\n", p->date[p->top1], tag);
			p->top1--;
		}
	}
	if (tag == 2)
	{
		if (p->top2 == 10)
		{
			printf("栈空了\n");
			return;
		}
		else
		{
			printf("%d已经出栈%d了\n", p->date[p->top2], tag);
			p->top2++;
		}
	}
}

链表

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

typedef struct xstack
{
	int data;
	struct xstack* next;
}stack;

void push(stack*p, int a);
void pop(stack*p);

int main(int argv, char const* argc[])
{
	stack* p = (stack*)malloc(sizeof(stack));
	p->next = NULL;
	push(p, 10);
	pop(p);
}

void push(stack*p, int a)
{
	stack* node= (stack*)malloc(sizeof(stack));
	node->data = a;
	node->next = p->next;
	p->next = node;
	printf("%d已入栈\n", a);
}
void pop(stack* p)
{
	//判断是否栈空
	if (p->next==NULL)
	{
		printf("栈空了\n");
		return;
	}
	else
	{
		stack* tem ;
		tem = p->next;
		p->next = tem->next;
		printf("%d已出栈\n", tem->data);
		free(tem);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值