C语言实现栈的操作

这是最近实训时写的关于栈的一些操作,保存下来:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define  N 10
#define  SIZE 100  

typedef struct STACK{   //数据结构定义:将栈定义为结构体类型
        char *base;   // 栈底指针
        char *top;   // 栈顶指针
        int size;   //栈的大小
}stack;

//  函数声明
void Creat_stack(stack &l);
int  Empty_stack(stack &l);
int Pop_stack(stcak &l,char &e);
int Gtop_stack(stack &l,char &e);
int Push_stack(stack &l,char &e);
int Clear_stack(stack &l);

//  函数定义部分
void Creat_stack(stack &l)   // 创建一个空栈
{
	l.base = (char *)malloc(sizeof(char) * SIZE);// 创建栈底空间
	if(!l.base)  // 如果栈底空间创建失败,则退出
		exit(0);
	l.top = l.base;// 将栈顶指针设为与栈底相同,表示此时是一个空栈
	l.size = SIZE;    // 栈的大小为宏定义的大小
}

int Empty_stack(stack &l)   // 判断栈是否为空
{
	if(l.base == l.top)
		return 1;
	else 
		return 0;
}


int Pop_stack(stcak &l,char &e)  // 若栈不空,则删除栈顶元素,用e返回其值,并返回
{
	if(Empty_stack(l))
		return 0;
	e = *(--l.top);
}

int Gtop_stack(stack &l,char &e)   // 若栈不空,则用e返回栈顶元素
{
	if(Empty_stack(l))
		return 0;
	e = *(l.top-1);      // 用e返回栈顶元素
}


int Push_stack(stack &l,char &e)
{ 
	// 插入元素e为新的栈顶元素
	if(l.top - l.base >= l.size) // 栈满,增加存储空间 
	{
		l.base = (char *)realloc(l.base,(l.size + N) * sizeof(char)); // realloc函数:第一个参数为原地址,第二个参数为要新开空间的大小
		if(!l.base)
			return 0;


		l.top = l.base + l.size;  // 定位栈顶指针
		l.size += N;    // 修改栈的大小
	}

	*l.top++ = e;
}

int Clear_stack(stack &l)  // 清空栈
{
	char *p = l.top;
	while(!Empty(l))
	{
		p = l.top;
		free(p); // 释放该结点
		--l.top;
	}
	return 1;
}

int Length_stack(stack &l) // 返回栈中元素个数
{
	char *p = l.top;  // 定义一个指针,赋值为栈顶指针
	int length = 0;

	while(p != l.base)  // 若不等于栈底指针,则继续循环
	{
		length++;  
		p++; // 继续循环
	}
	return length;  // 返回栈中元素个数
}

<pre snippet_file_name="blog_20131121_1_5963388" code_snippet_id="76772">
<pre snippet_file_name="blog_20131121_1_53660" code_snippet_id="76772">
 
 
 
 
 
 
 
 
 
 

                
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值