栈基本操作的C语言实现(附源代码已测试)

本文详细介绍了使用C语言实现栈的基本操作,包括构造空栈、压栈、弹栈、获取栈顶元素及栈长度计算。

  栈基本操作的C语言实现

/////////////////////////////////
//      作者:happy_fun        //
//  栈基本操作的C语言实现      //
//   时间:2011年11月19号      //
//   未经作者允许不得转载!    //
/////////////////////////////////
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREACE 10
////////////////////////////////
typedef struct SElemType
{
	char data;
}elemtype;
typedef struct SqStack
{
	elemtype *base;//base是变量名字,elemtype *表示base只能存储elemtype类型的变量的地址//int *表示存储整型变量地址
	elemtype *top;//top是变量名字,elemtype *表示top只能存储elemtype类型的变量的地址,指针就是地址,地址就是指针!
	int strcksize;
}stack,*pstack;
////////////////////////////////
void main()
{
	int Push(stack *s,elemtype e);
	int InitStack(stack *s);
	elemtype Pop(stack *s,elemtype e);
	elemtype GetTop(stack *s,elemtype e);
	int StackLength(stack *s);

	int a;
	stack s;
	elemtype e,del;
	e.data='T';
	if(InitStack(&s)==1)
		printf("构造空栈成功!\n\n");
	if(Push(&s,e))
		printf("压栈成功!\n\n");
	printf("返回的栈顶元素为:%c\n\n",GetTop(&s,e));
	printf("删除的栈顶元素为:%c\n\n",Pop(&s,del));
	printf("该栈的长度为:%d\n\n",a=StackLength(&s));
}
////////////////////////////////
//构造空栈
int InitStack(stack *s)//s是变量名,stack *表示s只能存储stack类型的变量地址
{
	s->base=(elemtype *)malloc(STACK_INIT_SIZE*sizeof(elemtype));
	s->top=s->base; 
	s->strcksize=STACK_INIT_SIZE;
	return 1;
}
///////////////////////////////
//将元素e压入栈
int Push(stack *s,elemtype e)
{
	if(s->top-s->base>=s->strcksize)//栈满追加空间
	{
		s->base=(elemtype *)realloc(s->base,(s->strcksize+STACKINCREACE)*sizeof(elemtype));
		s->strcksize=s->strcksize+(s->strcksize+STACKINCREACE);
	}
	if(!s->base)
		exit(0);
	*(s->top)=e;
	s->top++;
	printf("分配的存储空间为:%d\n",s->strcksize);
	return 1;
}
//////////////////////////////
//删除栈顶元素
elemtype Pop(stack *s,elemtype e)
{
	if(s->top==s->base)
	{
		printf("出错!\n");
		exit(0);
	}
	s->top--;
	e=*(s->top);
	printf("删除栈顶元素成功!\n");
	return e;
}
//////////////////////////////
//用e返回栈顶元素
elemtype GetTop(stack *s,elemtype e)
{
	if(s->top==s->base)
	{
		printf("Error!\n");
		exit(0);
	}
	s->top=s->top-1;
	e=*(s->top);
	s->top=s->top+1;
	return e;
}
/////////////////////////////
//返回栈的元素个数,即栈的长度
int StackLength(stack *s)
{
	int length;
	length=s->strcksize;
	return length;
}

第一次发帖,数据结构中栈的基本操作的实现,欢迎大家指导!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值