堆栈的C语言实现
2017-10-18 13:26
295 查看
一、堆栈 是一种具有一定操作约束的线性表,并包含对应的入栈和出栈的操作,且只能在栈顶操作,具有后入先出的特点。
其操作集有:1.创建空堆栈;2.判断堆栈是否满;3.判断堆栈是否为空;4.将数据放入堆栈;5.将数据从堆栈中抛出。
注意堆栈只能对栈顶元素进行操作,那么如果按顺序输入ABC,再抛出来,结果就是CBA。
二、线性表有顺序存储和链式存储,相应的堆栈的实现也有顺序存储实现和链式存储实现。
(一)堆栈的顺序存储实现
通常由一个一维数组和记录栈顶元素位置的变量组成
然后是关于堆栈的操作实现
1,入栈的操作
2,出栈的操作
如何在一个数组中创建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.创建空堆栈;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;
}
相关文章推荐
- C语言堆栈实现( 动态数组 )
- 堆栈的实现(c语言)
- c语言 链表实现堆栈
- 判断表达式括号是否匹配,C语言堆栈实现
- C语言实现堆栈
- 链式堆栈_C语言实现
- 堆栈的简单实现之一:基本操作(C语言实现)
- 简单堆栈实现(C语言)
- 数据结构与算法——在一个数组中实现两个堆栈(C语言)
- C语言实现堆栈
- 数据结构与C语言实现(二)——堆栈和队列
- 堆栈的应用--用C语言实现平衡符号
- 用C语言堆栈操作的计算器的实现(输入输出流使用的C++)
- 堆栈实现迷宫出路(C语言)
- 堆栈的简单实现之二:进制转换方面的简单应用(C语言实现)
- c语言的一结构数据的堆栈实现问题
- POJ 1979 Red and Black(C语言堆栈实现)
- C语言中的可变参数-printf的实现原理 在C/C++中,对函数参数的扫描是从后向前的。C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出
- SHA-1算法c语言实现
- UDP传输系统——C语言实现