链栈的数据结构以及链栈的实现

线性表有顺序存储结构和链式存储结构,栈属于线性表的一种,也具有顺序存储结构和链式存储结构。对于栈的链式存储结构,一般称之为链栈

栈的插入和删除只在栈顶进行操作,在单链表中,头指针是单链表的必须元素;而在栈中,栈顶指针也是链栈的必须元素,且一般将栈顶放在单链表的头部。

链栈的结构代码如下所示:

//定义数据结点类型
//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;
}

输出如下:

链栈的数据结构以及链栈的实现_第1张图片

代码地址:https://github.com/USuperMe/LinkStack.git

欢迎关注公众号,分享一些Unity3D、C#、C++数据结构和算法的相关学习知识。

链栈的数据结构以及链栈的实现_第2张图片

你可能感兴趣的:(C++,算法)