堆栈的C语言实现

 一、堆栈 是一种具有一定操作约束的线性表,并包含对应的入栈和出栈的操作,且只能在栈顶操作,具有后入先出的特点。

其操作集有:1.创建空堆栈;2.判断堆栈是否满;3.判断堆栈是否为空;4.将数据放入堆栈;5.将数据从堆栈中抛出。

注意堆栈只能对栈顶元素进行操作,那么如果按顺序输入ABC,再抛出来,结果就是CBA。

二、线性表有顺序存储和链式存储,相应的堆栈的实现也有顺序存储实现和链式存储实现。

(一)堆栈的顺序存储实现

通常由一个一维数组和记录栈顶元素位置的变量组成

struct stack{
ElementType array[MaxSize];
int top;
}ptr;

然后是关于堆栈的操作实现

1,入栈的操作

void push(struct stack ptr,ElementType item)
{
if(ptr->top==MaxSize)
printf("The stack has been brim");//堆栈已满
else
ptr->array[++(ptr->top)]=item;
return;
}

2,出栈的操作

void pop(struct stack ptr)
{
if(ptr->top==-1)
{
printf("The stack is void");//堆栈已空
return ERROR;
}
else
return ptr->array[(ptr->top)--];//抛出元素并且将top向下移动一位
 3,双栈

如何在一个数组中创建2个堆栈?堆栈1,堆栈2分别从数组两头向中间靠拢,当top2-top1=1时2个堆栈都满。

(二)堆栈的链式存储实现

实际上是一个单链表,称为链栈,插入删除操作只能在栈顶实现,链栈的栈顶为头节点。

struct liststack
{
ElementType data;
struct liststack* next;
}stack;
1.入栈操作

void push(ElementType item,struct liststack stack)
{
struct liststack* tempcell;
tempcell=(struct liststack*)malloc(sizeof(struct liststack));
tempcell->data=item;
temp->next=stack->next;
stack->next=tempcell;
}

2.出栈操作

ElementType pop(struct liststack stack)
{
if(stack->next==NULL)
return ERROR;
ElementType data;
struct liststack* fistcell;
firstcell=stack->next;
data=firstcell->item;
stack->next=firstcell->next;
free(firstcell);
return data;
}









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值