一个单向链表,并实现栈和队列

以下是本人学习中写的一个简单的链表和棧以及队列的实现,由于时间问题没有注释,但命名都很直观.很多不足之处正在慢慢探索学习中。
代码贴上来显示就有问题,不知道是CSDN的问题还是格式的问题,在我自己机子上没问题的,郁闷!

#include using namespace std; #include typedef double T; /* 单向链表类 */ class List { struct Node { T data; Node* next; Node(const T& t=T()):data(t),next(NULL){} }; Node* head; public : List():head(NULL){} void clear() { while(head!=NULL) { Node* q=head->next; delete head; head=q; } } ~List() { clear(); } void insert_front(const T& t) { Node* p=new Node(t); p->next=head; head=p; } void insert_back(const T& t) { Node* p=new Node(t); Node* q=head; if(head==NULL) head=p; else{ while(q->next!=NULL) q=q->next; q->next=p; } } void travel() { Node* p=head; while(p!=NULL) { cout< data<<&apos; &apos;; p=p->next; } cout< next; } return cnt; } T getHead() { if(head==NULL) throw "no head !"; return head->data; } T getTail() { if(head==NULL) throw "no tail !"; Node* p=head; while(p->next!=NULL) { p=p->next; } return p->data; } bool empty() { return head==NULL; } int find(const T& t) { Node* p=head; int pos=0; while(p!=NULL) { if(p->data==t) return pos; p=p->next; pos++; } return -1; } bool update(const T& o,const T& n) { int pos=find(0); if(pos==-1) return false; Node* p=getPointer(pos); p->data=n; return true; } private : Node* getPointer(int pos) { Node* p=head; for(int i=0;i next; } return p; } public : bool erase(const T& t) { int pos=find(t); if(pos==-1) return false; if(pos==0) { Node* q=head->next; delete head; head=q; }else{ Node* pre=getPointer(pos-1); Node* cur=pre->next; pre->next=cur->next; delete cur; } return true; } }; /* 栈类 */ class Stack { List l; public : void push(const T& t) { l.insert_front(t); } void pop() { l.erase(l.getHead()); } T top() { return l.getHead(); } bool empty() { return l.empty(); } int size() { return l.size(); } void clear() { l.clear(); } }; /* 队列类 */ class Queue { List l; public : void push(const T& t) { l.insert_back(t); } void pop() { l.erase(l.getHead()); } T front() { return l.getHead(); } T back() { return l.getTail(); } bool empty() { return l.empty(); } int size() { return l.size(); } void clear() { l.clear(); } }; void main() { //自己的测试代码 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值