链表栈

很多资料都是带头结点的栈实现,感觉不带头结点实现也更容易啊。

 

// 有本句 ,下面cout 前面可以没有  std::
using namespace std;
typedef char  ElemType;  //元素数据类型 char 
#define MAXSIZE 10

//普通链节点结构
typedef struct LinkNode {
    ElemType Data;
    struct LinkNode* Next;
}LinkNode;

//链栈结构 关键成员为指向链节点的指针
typedef struct LinkStack {
    LinkNode* Top;
    int Len;
}*LS;

//初始化 链结构成员赋初值
void InitLS(LS &S) {
    S = new LinkStack;
    S->Top = NULL;
    S->Len = 0;
}

//入栈  申请链节点,修改指针
void Push(LS& S,ElemType e) {
    LinkNode* t = new LinkNode;
    t->Data = e;
    t->Next = S->Top;
    S->Top = t;
    S->Len++;
}

//出栈  取数据,释放资源,修改指针
bool Pop(LS &S,ElemType &e) {
    LinkNode* p = S->Top;
    if (p){
        e= p->Data;
        S->Top = p->Next;
        delete p;
        S->Len--;
    }
    else{
        cout << " Empty!   ";
        e = ' ';
        return 0;
    }
}


void main() {
    LS S;
    InitLS(S);

    Push(S, 'a');
    Push(S, 'b');
    Push(S, 'c');
    Push(S, 'd');

    ElemType e;

    Pop(S,e);
    cout <<"Pop " << e << "  Len = "<< S->Len;
    cout << endl;

    Pop(S, e);
    cout << "Pop " << e << "  Len = " << S->Len;
    cout << endl;

    Pop(S, e);
    cout << "Pop " << e << "  Len = " << S->Len;
    cout << endl;

    Pop(S, e);
    cout << "Pop " << e << "  Len = " << S->Len;
    cout << endl;

    
    Pop(S, e);
    cout << "Pop " << e << "  Len = " << S->Len;
    cout << endl; 

}

 

posted @ 2021-09-17 11:19  abel2020  阅读(30)  评论(0编辑  收藏  举报