链栈
基本概念
数据结构的三要素
费曼理解
1 2
| 栈结构: 头指针L → [栈顶节点] → [节点2] → ... → [栈底节点] → NULL
|
就像编绳结一样,一个节点一个结从右往左遍就得从左往右解
内部实现:
1 2 3 4
| typedef struct Linknode{ ElemType data; struct Linknode *next; }*LiStack
|
复杂度分析:
初始化
1 2 3 4
| bool InitStack(LiStack &L){ L= new Linknode; L->next=NULL; }
|
判断栈空
1 2 3 4 5 6 7 8
| bool isEmpty(LiStack &L){ if(L-next==NULL){ return true; } else{ return false; } }
|
入栈
1 2 3 4 5 6 7
| void Push(LiStack &L,ElemType e){ Linknode s; s =new Linknode; s->data=e; s-next=L->next; L->next=s; }
|
复杂度分析
- 时间复杂度:O(1)
- 空间复杂度:O(1)
出栈
1 2 3 4 5 6 7 8 9 10
| bool Pop(LiStack &L,ElemType &e){ Linknode s; if isEmpty(L) return false; s=L->next; e=s->data; L->next=L->next->next; delete(s); return true; }
|
复杂度分析
- 时间复杂度:O(1)
- 空间复杂度:O(1)
应用场景: