【练习】c++分别用链队列和普通队列输出杨辉三角
生活随笔
收集整理的這篇文章主要介紹了
【练习】c++分别用链队列和普通队列输出杨辉三角
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
普通隊列:
class queue { public:queue();bool empty()const;bool full() const;int get_front(int& x)const;int append(const int x);int serve();int len() { return count; } private:int count;int front, rear;int data[maxn]; }; queue::queue() {count = 0; front = rear = 0; }bool queue::empty()const {if (count == 0) return true;return false;//等價于:return front == rear; } bool queue::full()const {if (count == maxlen - 1) return true;return false;//等價于:return ( rear + 1 ) % maxlen == front ; }int queue::get_front(int& x)const//取隊頭 {if (empty()) return 0;x = data[(front + 1) % maxn];return x; } int queue::append(const int x)//入隊列 {if (full()) return 0;rear = (rear + 1) % maxlen;data[rear] = x;count++;return 1; } int queue::serve()//出隊列 {if (empty()) return 0;front = (front + 1) % maxlen;count--;return 1; }void yang(int n) {queue q;int i = 2, j = 1, x, p,iff;if (n == 1) { cout << 1 << " "; return; }q.append(1);if (n == 2) {cout << 1 << " " << endl;cout << 1 << " " << 1 << endl;return;}for (int k = 0; k < n - 0; k++)cout << " ";cout << 1 << " "<<endl;for (int k = 0; k < n - 1; k++)cout << " ";cout << 1 << " " << 1 << endl;q.serve();q.append(1);q.append(1);// cout << q.get_front(x) << " ";while (i < n-1 ){q.append(1);for (int k = 0; k < n - i; k++)cout << " ";cout << 1 << " ";// q.serve();// while (!q.empty()) {for (j = 1; j < i; j++) {p = q.get_front(x);q.serve();if (!q.empty()) {p += q.get_front(x);q.append(p);cout << p << " "; }/* else {iff = 0;break;}*/}q.serve();cout << 1 << " "; q.append(1);cout << endl;// }i++;}while (!q.empty()) {cout << q.get_front(x) << " ";q.serve();}cout << 1; }int main() {int n;while (1) {cout << "請輸入數字: 按0退出";cin >> n;if (n == 0) break;cout << endl;cout << n << "行的楊輝三角:";cout << endl;yang(n);cout << endl;} }鏈隊列
struct node {int data;node* next;}; class queue { public:queue();~queue() {while (!empty()) serve();delete front;} //釋放頭;bool empty()const;bool full() const;int get_front(int& x)const;int append(const int x);int serve();int len() { return count; } private:int count;node* front, * rear;}; queue::queue() {front = new node;count = 0; front->next = NULL;rear = front; }bool queue::empty()const {if (count == 0) return true;return false;//等價于:return front == rear; } bool queue::full()const {if (count == maxlen - 1) return true;return false;//等價于:return ( rear + 1 ) % maxlen == front ; }int queue::get_front(int& x)const {if (empty()) return 0;x =front->next->data;return x; } int queue::append(const int x) {node* s = new node;s->next = NULL;s->data = x;rear->next = s;rear = s;count++;return 1; } int queue::serve() {if (empty()) return 0;node* u = front->next;front->next=u->next;delete u;if (front->next == NULL) rear = front;count--;return 1; }void yang(int n) {queue q;int i = 2, j = 1, x, p,iff;if (n == 1) { cout << 1 << " "; return; }q.append(1);if (n == 2) {cout << 1 << " " << endl;cout << 1 << " " << 1 << endl;return;}for (int k = 0; k < n - 0; k++)cout << " ";cout << 1 << " "<<endl;for (int k = 0; k < n - 1; k++)cout << " ";cout << 1 << " " << 1 << endl;q.serve();q.append(1);q.append(1);// cout << q.get_front(x) << " ";while (i < n ){q.append(1);for (int k = 0; k < n - i; k++)cout << " ";cout << 1 << " ";// q.serve();// while (!q.empty()) {for (j = 1; j < i; j++) {p = q.get_front(x);q.serve();if (!q.empty()) {p += q.get_front(x);q.append(p);cout << p << " ";}/* else {iff = 0;break;}*/}q.serve();cout << 1 << " "; q.append(1);cout << endl;// }i++;}// cout << 1; }int main() {int n;while (1) {cout << "請輸入數字: 按0退出(鏈隊列實現)";cin >> n;if (n == 0) break;cout << endl;cout << n << "行的楊輝三角:";cout << endl;yang(n);cout << endl;} }注意兩種方式的區別:1.類中是否有析構函數和析構函數中釋放結點的寫法
2.在循環中,普通隊列是 while (i < n-1 ) 鏈隊列是while (i < n)且可以直接在循環中輸出,而普通隊列還進行了單獨輸出最后一層(當然,這個也可能是需要優化的代碼)
3.鏈隊列的構造函數:
queue::queue()
{
front = new node;
count = 0; front->next = NULL;
rear = front;
}
可以理解為:
結果:
總結
以上是生活随笔為你收集整理的【练习】c++分别用链队列和普通队列输出杨辉三角的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【python记录】使用ip摄像头 vl
- 下一篇: 【笔记】python os的使用 文件批