2)队列

 1 #include<iostream>
 2 #include<iomanip>
 3 using namespace std;
 4 
 5 enum error{overflow,underflow,success};
 6 const int maxlen=100;
 7 
 8 class queue{
 9 public:
10     queue();//初始化
11     bool empty()const;//判断为空
12     bool full()const;//判断为满
13     int get_front(int &x)const;//取队头元素
14     error append(const int x);//入队
15     error serve();//出队
16 private:
17     int count;//队列中元素计数
18     int rear,front;//队头,队尾
19     int data[maxlen];//存储队列中的数据
20 };
21 queue::queue(){//初始化
22     count=0;
23     rear=front=0;
24 }
25 
26 bool queue::empty()const{//判断为空
27     if(count==0)return true;
28     return false;
29 }
30 
31 bool queue::full()const{//判断为满
32     if(count==maxlen-1)return true;
33     return false;
34 }
35 
36 int queue::get_front(int &x)const{//取队头元素
37     if(empty())return underflow;
38     x=data[(front+1)%maxlen];
39     return success;
40 }
41 error queue::append(const int x){//入队
42     if(full())return overflow;
43     rear=(rear+1)%maxlen;
44     data[rear]=x;
45     count++;
46     return success;
47 }
48 
49 error queue::serve(){//出队
50     if(empty())return underflow;
51     front=(front+1)%maxlen;
52     count--;
53     return success;
54 }
55 
56 int main(){
57     queue q;
58     int n;
59     cout<<"please input 杨辉三角要打印的行数:";
60     cin>>n;
61     int s1,s2;
62     for(int i=1;i<n;i++)cout<<"  ";
63     cout<<1<<endl;//输出第一行上的1
64     q.append(1);//所输出1入队
65     for(int i=2;i<=n;i++){//逐行计算并输出2~N行上的数据
66         s1=0;//存放前一个入队数
67         for(int k=1;k<=n-i;k++ )cout<<"  ";
68         for(int j=1;j<=i-1;j++){//先计算并输出n-1个数
69             q.get_front(s2);//取队头元素并出队
70             q.serve();
71             cout<<s1+s2<<setw(4);
72             q.append(s1+s2);//所输出的当行中的元素入队
73             s1=s2;
74         }
75         cout<<1<<endl;//输出当行中的子最后一个元素1并换行
76         q.append(1);
77     }
78     return 0;
79 }

原文地址:https://www.cnblogs.com/minmsy/p/5021926.html