栈分为静态栈和动态栈,静态栈由数组构建而成。动态栈是由链表构建而成。
栈:后进先出。所有的操作都是在栈顶进行。
总结一下 动态栈。
动态栈由链表构成,所以要定义 链表结构体,栈结构体。链表结构体里有两个元素,一个数据,一个指针。栈结构体也有两个,两个都是指针,指向栈底,指向栈顶。
定义如下:
#include <iostream>
#include <string>
using namespace std;
typedef struct SNode
{
int data;
SNode* p_next;
}SNode,*pNode;
typedef struct Stack
{
SNode* pTop;
SNode* pBottom;
} Stack;
void initStack(Stack* );
void push(Stack*,int);
void traverse(Stack*);
int main()
{
Stack S;
initStack(&S);
push(&S,3);
push(&S,4);
push(&S,5);
push(&S,6);
push(&S,7);
traverse(&S);
return 0;
}
void initStack(Stack* pS)
{
SNode* node=(pNode)malloc(sizeof(SNode));
pS->pTop=pS->pBottom=node;
node->p_next=NULL;
if (NULL==pS->pTop)
{
cout << "动态分配内存失败" <<endl;
}
}
void push(Stack* pS,int val)
{
SNode* node=(SNode*)malloc(sizeof(SNode));
node->data=val; //入栈分为三步 1 创建新节点 赋值
node->p_next=pS->pTop; // 2节点连入栈
pS->pTop=node; // 3栈顶指针指向新节点
};
void traverse(Stack* pS)
{
SNode* p_node=pS->pTop;
while (p_node!=pS->pBottom)
{
cout << p_node->data << " ";
p_node=p_node->p_next; //链表遍历
}
}