C++程序设计语言课后习题10章12题
2014-09-30 15:41
337 查看
1.向量实现
#include <iostream> #include <stdexcept> using namespace std; class Char_queue{ private: char *_queue; unsigned head,tail; unsigned const capacity; static unsigned const default_capacity = 20; public: Char_queue(unsigned _capacity = default_capacity); inline char dequeue(); inline void enqueue(const char& ); inline bool empty() const; inline bool full() const; ~Char_queue(); }; Char_queue::Char_queue(unsigned _capacity):_queue(new char[_capacity]), head(0),tail(0),capacity(_capacity){} Char_queue::~Char_queue() { delete[] _queue; } inline void Char_queue::enqueue(const char& ch) { if(full()){ throw std::overflow_error(std::string("queue")); } else { _queue[tail]=ch; tail = (tail+1)%capacity; } } inline char Char_queue::dequeue() { if(empty()){ throw std::underflow_error(std::string("queue")); } else { char ch=_queue[head]; head = (head+1)%capacity; return ch; } } inline bool Char_queue::empty() const { return head==tail; } inline bool Char_queue::full() const { return head==(tail+1)%capacity; } int main() { Char_queue ch_que; char ch='a'; for(int i=0;i<17;i++) ch_que.enqueue((char)(ch+i)); while(!ch_que.empty()) cout<<ch_que.dequeue()<<endl; //ch_que.dequeue(); cout<<endl; return 0; }
2.链表实现
#include <iostream> #include <stdexcept> using namespace std; class Char_queue{ private: struct Node{ char ch; struct Node* next; }; Node* head,*tail; void destroyQueue(); public: Char_queue(); inline char dequeue(); inline void enqueue(const char& ); inline bool empty() const; ~Char_queue(); }; Char_queue::Char_queue() { head = tail = new Node(); head->next = NULL; } void Char_queue::destroyQueue() { Node *p = NULL; Node *q = NULL; for(p=head;p != tail;){ q = p; p = p->next; delete q; } delete p; head = tail = NULL; } Char_queue::~Char_queue() { destroyQueue(); } inline void Char_queue::enqueue(const char& ch) { Node *p = new Node(); p->ch = ch; p->next = NULL; tail->next = p; tail = p; } inline char Char_queue::dequeue() { if(!empty()){ char chr; Node *p=head; head = head->next; chr=p->ch; delete p; return chr; } else { throw std::underflow_error("queue"); } } inline bool Char_queue::empty() const { return head==tail; } int main() { Char_queue chq; for(int i=0;i<20;i++) chq.enqueue('a'+i); while(!chq.empty()) cout<<chq.dequeue()<<' '; cout<<endl; return 0; }
相关文章推荐
- C++程序设计语言课后习题10章15题
- 【打基础】高级语言程序设计·厦大出版社 课后习题个人记录2
- C++程序设计(第2版)课后习题答案--第8章
- C++程序设计课后习题及解答(第四章)
- java语言程序设计第十版(Introduce to java) 课后习题 chapter6-10
- 【打基础】高级语言程序设计·厦大出版社 课后习题个人记录3
- java语言程序设计第十版(Introduce to java) 课后习题 chapter6-18
- C++程序设计课后习题及解答(第八章)
- JAVA语言程序设计基础课后习题第六章
- java语言程序设计第十版(Introduce to java) 课后习题 chapter6-6
- C语言程序设计谭浩强版课后习题 8-1,8-3
- java语言程序设计基础课后习题第二章
- C++程序设计(第2版)课后习题答案--第13章
- C++程序设计课后习题及解答(第七章)
- 【打基础】高级语言程序设计·厦大出版社 课后习题个人记录1
- C++程序设计(第2版)课后习题答案--第4章
- java 语言程序设计-李尊朝 第9章 异常处理 课后习题
- java语言程序设计第十版(Introduce to java) 课后习题 chapter6-13
- JAVA语言程序设计基础课后习题第四章
- C++程序设计课后习题及解答(第二章)