本文实现数据结构中堆栈的C语言实现。栈是一个后进先出的数据结构,它的作用是将对象序列进行反转。OK,废话少说,我们来看看如何用C语言实现一个堆栈吧。
1.首先,定义堆栈的数据结构,由于我们使用C语言实现,所以使用struct来定义堆栈的数据类型:
typedef int ElemType; //堆栈中的元素数据类型
#define MaxSize (256) //堆栈所能容纳的最大元素个数
#define ERROR (0XFFFFFFFF)
typedef srtuct
{
ElemType data[MaxSize];
int top; //栈顶指针
}Stack,*PStack;
2.堆栈的操作主要有入栈(push)和出栈(pop)两个操作,其它操作还有创建堆栈,判断栈空,判断栈满,返回栈中当前的元素个数等等。OK。下面我们一一实现他们。
(1)首先我们先创建一个堆栈,很简单,直接定义即可:Stack st;因为初始时栈是空的,所以将栈顶元素设置为-1,即st.top=-1;
(2)入栈操作的实现:
void push(Stack* st,ElemType e)
{
if(isFull(st))//判断栈是否已满
{
printf("栈已经满\n");
return;
}
//栈没有满则入栈
st->data[++(st->top)] = e;
}
(3)出栈操作:
ElemType pop(Stack* st)
{
if (isEmpty(st))//判断栈是否已空
{
printf("栈已经为空!\n");
return ERROR; //返回错误标志
}
//栈没空,则出栈
return st->data[(st->top)--];
}
(4)辅助函数的实现:
//判断栈是否已满
uint8_t isFull(Stack* st)
{
return (st->top == MaxSize-1) ? 1 : 0;
}
//判断栈是否已空
uint8_t isEmpty(Stack* st)
{
return (st->top == -1) ? 1 : 0;
}
//输出栈中的元素,但不出栈
void print(Stack* st)
{
int index = st->top;
while(index >= 0)
{
printf("%d ",st->data[index--]);
}
}
(5)测试结果:
int main()
{
Stack st;
st.top = -1;
push(&st,1);
push(&st,2);
push(&st,3);
push(&st,4);
push(&st,5);
print(&st);
return 0;
}
输出:5 4 3 2 1
OK,到此,我们的堆栈就实现好了。有面向对象基础的朋友可以试着将栈封装起来。本文的栈使用顺序存储的方式,也就是用数组对对数据进行存储,栈的空间是有限的,灵活性不够。下个博文我将使用链式存储来实现,这样栈的空间就有可能达到程序中所有可用的内存了。本文属于原创,转载请标明出处,有错误请各位朋友指正。蟹蟹!
|