栈基本操作的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;
}

第一次发帖,数据结构中栈的基本操作的实现,欢迎大家指导!
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值