栈其实是特殊的线性表,其特点是后进先出,顺序存储结果的栈暂时不提,下面是关于链栈的部分代码
1.头文件stack.h
typedef int ElemType;
//定义一个栈结点
typedef struct Node
{
ElemType data;
struct Node *next;
}StackNode,*LinkStackPtr;
//定义一个栈顶结点
typedef struct TopNode
{
LinkStackPtr top;//栈顶元素
int count;//栈元素的个数
}LinkStack;
//创建一个空栈
bool CreateStack(LinkStack &S);
//压栈
bool Push(LinkStack &S,ElemType e);
//出栈
bool Pop(LinkStack &S);
//打印栈
bool print(LinkStack S);
2.函数实现stack.cpp
#include <iostream>
#include "stack.h"
bool CreateStack(LinkStack &S)
{
S.top=NULL;
S.count=0;
return true;
}
bool Push(LinkStack &S,ElemType e)
{
LinkStackPtr temp=(LinkStackPtr)malloc(sizeof(StackNode));
temp->data=e;
temp->next=S.top;
S.top=temp;
S.count++;
return true;
}
bool Pop(LinkStack &S)
{
LinkStackPtr temp;
temp=S.top;
S.top=temp->next;
S.count--;
free(temp);
return true;
}
bool print(LinkStack S)
{
LinkStackPtr temp;
temp=S.top;
while(S.count--)
{
printf("%d\n",temp->data);
temp=temp->next;
}
printf("--------------分割线---------------------\n");
return true;
}
3.主函数main.cpp
#include <iostream>
#include "stack.h"
int main()
{
LinkStack S;
CreateStack(S);//创建一个空栈
for(int i=1;i<=10;i++)
Push(S,i);//压栈操作
print(S);//打印栈
Pop(S);//弹栈
print(S);//打印栈
return 0;
}