棧其實是特殊的線性表,其特點是後進先出,順序存儲結果的棧暫時不提,下面是關於鏈棧的部分代碼
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;
}