簡單資料結構----鏈棧的C++實現
阿新 • • 發佈:2019-01-02
/* * File name : LinkList.cpp * Function : 鏈棧的C++實現 * Created on : 2016年4月22日 * Author : [email protected] * Copyright : 歡迎大家和我一起交流學習,轉載請保持原始檔的完整性。 任何單位和個人不經本人允許不得用於商業用途 */ #include <cstdio> #include <iostream> using namespace std; typedef struct node { int data; struct node * next; }Node,*pNode; typedef struct { pNode ptop; int count; }Lstack; void Lstack_init(Lstack &LS); void Lstack_push(Lstack &LS, int elem); bool Lstack_pop(Lstack &LS, int &elem); bool Lstack_is_empty(Lstack &LS); int Lstack_get_length(Lstack &LS); bool Lstack_get_elem(Lstack &LS, int &elem); int main(int argc, char** argv) { int elem; Lstack ls; Lstack_init(ls); Lstack_pop(ls, elem); cout << "Lastack ls is empty ? " << Lstack_is_empty(ls) << endl; Lstack_push(ls, 10); Lstack_push(ls, 11); Lstack_push(ls, 12); cout << "Lastack ls is empty ? " << Lstack_is_empty(ls) << endl; cout << "The length of Lstack ls is " << Lstack_get_length(ls) << endl; Lstack_push(ls, 18); cout << "The length of Lstack ls is " << Lstack_get_length(ls) << endl; Lstack_pop(ls, elem); cout << "The pop elem is " << elem << endl; cout << "The length of Lstack ls is " << Lstack_get_length(ls) << endl; Lstack_get_elem(ls, elem); cout << "The top of Lstack ls is " <<elem << endl; Lstack_push(ls, 13); cout << "The top of Lstack ls is " << elem << endl; Lstack_pop(ls, elem); cout << "The top of Lstack ls is " << elem << endl; Lstack_pop(ls, elem); cout << "The top of Lstack ls is " << elem << endl; Lstack_pop(ls, elem); cout << "The top of Lstack ls is " << elem << endl; Lstack_pop(ls, elem); cout << "The top of Lstack ls is " << elem << endl; Lstack_pop(ls, elem); cout << "The top of Lstack ls is " << elem << endl; return 0; } void Lstack_init(Lstack &LS) { LS.count = 0; LS.ptop = nullptr; } void Lstack_push(Lstack &LS, int elem) { pNode p = LS.ptop; pNode ptmp = nullptr; ptmp = new Node; ptmp->data = elem; ptmp->next = p; LS.ptop= ptmp; LS.count++; } bool Lstack_pop(Lstack &LS, int &elem) { pNode p = LS.ptop; pNode ptmp = nullptr; if (LS.count == 0) { cout << "Lstack is empty,can not pop." << endl; elem = -1; return false; } ptmp = LS.ptop; elem = LS.ptop->data; LS.ptop=ptmp->next; delete ptmp; LS.count--; return true; } bool Lstack_is_empty(Lstack &LS) { return (LS.count == 0) ? true : false; } int Lstack_get_length(Lstack &LS) { return LS.count; } bool Lstack_get_elem(Lstack &LS , int &elem) { if (Lstack_is_empty(LS)) { cout << "Lstack is empty." << endl; return false; } elem = LS.ptop->data; return true; }