您的位置:首页 > 编程语言 > C语言/C++

堆栈的C语言实现

2017-10-18 13:26 295 查看
 一、堆栈 是一种具有一定操作约束的线性表,并包含对应的入栈和出栈的操作,且只能在栈顶操作,具有后入先出的特点。

其操作集有: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: