HFUT数据结构作业感悟与分析-----C++运用队列解决杨辉三角

//代码没有很详细的解释,如果不明白,请自己根据代码一行一行分析
//分析三到四层,即可明白其中的原理
//再有问题的话,请在下面留言
#include<iostream>
using namespace std;
//我自己写的Queue,是使用链队列实现的,相关知识可以在课本上查到
template<class T>
class Queue{
 public:
  class Node{//内部类,用来表示每个节点
   public:
    T value;
    Node* next = NULL;
  };
  int length = 0;
  Node* head = NULL;//队列不同于栈,需要一个头指针,用来访问队首
  Node* tail = NULL;//一个尾指针用来在队尾插入元素
  Node* p = NULL;//一个中间指针,用来过渡
  void push(T val){//入队操作
   p = new Node;
   p->value = val;
   if(head == NULL){
    head = p;
   }else{
    tail->next = p;
   }
   tail = p;
   length++;
  }
  int size(){//队伍的大小
   return length;
  }
  T pop(){//和stl标准库的pop()函数不一样,不仅可以删除头元素,还可以将头元素的值返回
   T value = head->value;
   p = head;
   head = head->next;
   delete p;
   length--;
   return value;
  }
  T front(){//返回队伍的队首元素
   return head->value;
  }
  bool empty(){//判断队伍是否为空
   return length == 0;
  }
  void show(){//我自己加入的一个从队首到队尾的一个输出展示函数
   p = head;
   while(p != NULL){
    cout << p->value << " ";
    p = p->next;
   }
   cout << endl;
  }
};
int main(){
 int n;
 cin >> n;//n为杨辉三角的层数
 Queue<int> queue;
 for(int i = 1; i <= n; i++){//n层,所以循环n次
  for(int j = 0; j < i - 2; j++){//这个请读者自行体会,大概自己写个三四层之后,就能够明白其中的原理了
   queue.push(queue.pop() + queue.front());//这句语句非常简练,请读者自行体会,我认为比课本上的更加简洁一些
  }
  queue.push(1);//这是很关键的一步
  queue.show();//运算结束,展示每一行
 }
 
 return 0;
}

猜你喜欢

转载自blog.csdn.net/lalala_HFUT/article/details/79583678