线性表有顺序存储结构和链式存储结构,栈属于线性表的一种,也具有顺序存储结构和链式存储结构。对于栈的链式存储结构,一般称之为链栈。
栈的插入和删除只在栈顶进行操作,在单链表中,头指针是单链表的必须元素;而在栈中,栈顶指针也是链栈的必须元素,且一般将栈顶放在单链表的头部。
链栈的结构代码如下所示:
//定义数据结点类型
//typedef 定义结构类型别名
//LinkStaclPtr指向结构的指针
typedef struct Node{
int data;
Node *next;
} StackNode,*LinkStackPtr;
//定义链栈的结构类型
typedef struct LinkStack{
LinkStackPtr top;//栈顶指针
int count=0;
} LinkStack;
入栈操作:
int push(LinkStack *S,int element){
LinkStackPtr s=new Node;
s->data=element;
s->next=S->top;
S->top=s;
S->count++;
return element;
}
出栈操作:
int pop(LinkStack *S){
int temp;
LinkStackPtr p;
if (S->count<=0){
cout<<"栈空"<<" ";
}
temp=S->top->data;
p=S->top;
S->top=S->top->next;
delete p;
S->count--;
return temp;
}
测试代码如下:
int main()
{
LinkStack linkStack;
cout << "入栈10个元素" << endl;
for (auto i = 0; i < 10; i++)
{
std::cout << push(&linkStack, i) << " ";
}
cout << "\n";
cout << "---分隔符---" << endl;
cout << "出栈15个元素" << endl;
for (auto i = 0; i < 15; i++)
{
cout << pop(&linkStack) << " ";
}
cout << "\n";
return 0;
}
输出如下:
代码地址:https://github.com/USuperMe/LinkStack.git
欢迎关注公众号,分享一些Unity3D、C#、C++数据结构和算法的相关学习知识。