鏈棧---創建、初始化、入棧、出棧、取棧頂元素、判空


鏈棧的實現:注意 指針的方向 跟 單鏈表是反着的,其中S為頭指針,為空時頭指針==NULL

 

 

//鏈棧的創建實現---是運算受限的單鏈表,只能在鏈表頭部進行操作
typedef struct StackNode {
    int data;
    struct StackNode *next;
}StackNode,*LinkStack;

LinkStack S;

 

入棧操作:

//鏈棧的入棧
bool PushLinkStack(LinkStack &s, int e)
{
    StackNode *p = new StackNode;
    p->data = e;
    p->next = s;
    p = s;
    return true;
}

 

鏈棧的刪除-出棧:

//鏈棧的出棧
bool PopLinkStack(LinkStack &s, int &e)
{
    StackNode *p;
    if (s == NULL)
        return false;
    e = s->data;
    p = s;
    s = s->next;
    delete p;
    return true;
}

 

 

最終版代碼:

//鏈棧的創建實現---是運算受限的單鏈表,只能在鏈表頭部進行操作
typedef struct StackNode {
    int data;
    struct StackNode *next;
}StackNode,*LinkStack;

LinkStack S;

//鏈棧的初始化
void InitLinkStack(LinkStack &s)
{
    //棧頂指針(頭指針置為空)
    s = NULL;
}

//判斷鏈棧是否為空
bool EmptyListStack(LinkStack s)
{
    if (s == NULL)
        return true;
}

//鏈棧的入棧
bool PushLinkStack(LinkStack &s, int e)
{
    StackNode *p = new StackNode;
    p->data = e;
    p->next = s;
    s = p;//將棧頂指針指向新結點
    return true;
}

//鏈棧的出棧
bool PopLinkStack(LinkStack &s, int &e)
{
    StackNode *p;
    if (s == NULL)
        return false;
    e = s->data;
    p = s;
    s = s->next;
    delete p;
    return true;
}

//取棧頂元素
int GetLinkStackTop(LinkStack s)
{
    if (s != NULL)
        return s->data;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM