链栈的基本操作实现
2014-06-27 02:08
375 查看
实现中没有额外的头结点,见代码:
#include <iostream> using namespace std; typedef char Item; typedef struct Node { Item data; Node *link; }Node,*Stack; void Copy(Item *dest,Item *src); void InitStack(Stack *T); void Push(Stack *T,Item item); void Pop(Stack *T,Item *item); Item Top(Stack T); bool Isempty(Stack T); void Destroy(Stack *T); void PrintStack(Stack T); void Copy(Item *dest,Item *src) { *dest = *src; } void InitStack(Stack *T) { *T = NULL; } bool Isempty(Stack T) { return (T == NULL); } void Push(Stack *T,Item item) { Node *p = new Node; Copy(&(p->data),&item); if(Isempty(*T)) { *T = p; } else{ p->link = *T; *T = p; } } void Pop(Stack *T,Item *item) { if(Isempty(*T)) { Item v = '#'; Copy(item,&v); } Node *tmp = *T; Copy(item,&(tmp->data)); *T = (*T)->link; delete tmp; } Item Top(Stack T) { if(!Isempty(T)) return T->data; } void Destroy(Stack *T) { if(!Isempty(*T)) { Node *tmp = *T; *T = (*T)->link; delete tmp; } } void PrintStack(Stack T) { Node *tmp = T; while(tmp) { cout<<"node : "<<tmp->data<<endl; tmp = tmp->link; } } int main() { Stack s; InitStack(&s); for(int i=0;i<7;i++) Push(&s,'A'+i); PrintStack(s); Item v; Pop(&s,&v); cout<<"node "<<"( "<<v<<" )"<<" poped."<<endl; PrintStack(s); Push(&s,'X'); cout<<"node "<<"( "<<"X"<<" )"<<" pushed."<<endl; PrintStack(s); cout<<"Top node of current stack :"<<Top(s)<<endl; Destroy(&s); getchar(); }测试输出:
node : G node : F node : E node : D node : C node : B node : A node ( G ) poped. node : F node : E node : D node : C node : B node : A node ( X ) pushed. node : X node : F node : E node : D node : C node : B node : A Top node of current stack :X
相关文章推荐
- 栈-链栈的基本操作及实现
- 实验4:栈和队列的基本操作实现及其应用之《链栈》
- 实验4:栈和队列的基本操作实现及其应用——链栈
- 实验4:栈和队列的基本操作实现及其应用之《链栈》
- 用C语言实现链栈的基本操作
- 顺序栈和链栈的基本操作实现
- 链栈的基本操作实现
- 链栈的基本操作实现(c语言)
- 实验4:栈和队列的基本操作实现及其应用之《链栈》
- 数据结构顺序栈和链栈基本操作----c++实现
- 顺序栈、链栈基本操作
- 顺序栈、链栈基本操作
- 顺序栈、链栈基本操作
- 顺序栈、链栈基本操作
- 二叉树基本操作的程序实现
- 顺序栈、链栈基本操作
- 顺序栈、链栈基本操作
- 顺序栈、链栈基本操作
- 顺序栈、链栈基本操作
- DataGrid的使用:(一)在DataGrid控件中实现基本的操作(编辑、删除、分页)