数据结构:栈的C语言实现

栈(Stack),也称为堆栈,是一种特殊的线性表,其元素的关系是线性关系,其特殊型体现在只能在一端插入和删除元素。栈表现后进先出(LIFO)的特点。
栈的基本运算如下:

  • initStack(Stack &stack):初始化栈
  • isEmpty(stack):判断栈是否为空
  • top(Stack stack, StackType& elem):取栈顶元素
  • push(Stack &stack,StackType& elem):进栈
  • pop(Stack &stack,StackType& elem):出栈
  • distoryStack(&stack):销毁栈

如下是栈的C语言实现:

#include <stdio.h>
#include <stdlib.h>
#define INIT_SIZE 5	//初始大小
#define INCREA_SIZE 5	//分配增量

typedef int StackType;

typedef struct 
{
	StackType *elem;
	int size;//栈大小
	int length;//数据长度
}Stack;

//初始化栈
int initStack(Stack &stack){
	stack.elem=(StackType*)malloc(sizeof(Stack)*INIT_SIZE);//分配初始内存空间
	if(!stack.elem){
		printf("内存分配失败。\n");
		return -1;
	}
	stack.length=0;//设置数据长度和栈大小
	stack.size=INIT_SIZE;
	return 1;
}

//取栈顶元素
int top(Stack stack, StackType& elem) {
    if (stack.length == 0)
        return 0;
    elem = stack.elem[stack.length - 1];
    printf("%d\n", elem);
    return 1;
}

//出栈
StackType pop(Stack &stack,StackType& elem){
	if(stack.length==0){
		printf("栈为空。\n");
		return -1;
	}
	elem=stack.elem[--stack.length]//栈顶指针下移
	printf("%d\n", elem);
}
StackType push(Stack &stack,StackType m){
	if(stack.length==stack.size){
		printf("追加栈空间。\n");
		StackType* extra=(StackType*)realloc(stack.elem, (stack.size+INCREA_SIZE)*sizeof(StackType));
		if(!extra){
			printf("追加新的空间失败。\n");
			return -1;
		}
		stack.elem=extra;
		stack.size+=INCREA_SIZE;//更新栈大小
	}
	stack.elem[stack.length++]=m;
	return 1;
}
int main(int argc, char const *argv[])
{
	/* code */
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值