STL之队列(链表实现)

mac2026-02-08  0

1 实验项目三:队列的基本操作应用

截止时间:11月14日23:59 课程名称:数据结构 实验目的: 1.掌握队列的定义及实现; 2.掌握利用队列的基本操作。 实验要求: 1、 使用链式结构完成队列的各种基本操作; 2、 补充完善教材81页的舞伴问题。 实验项目名称:队列的基本操作应用 实验过程: 1、 先建立一个舞者队列,依次往队列中添加人员信息(8个人,5男3女); 2、 分别创建男女队列; 3、 从舞者队列中依次将队首元素出队并判断其性别并添加至男队(5人)或女队(3人); 4、 分别从男队和女队出队队首元素并配对输出;(男队女队分别3人) 5、 将未完成的一队队首元素输出(男队的队首成员名称)。

实验结果: 输入:8人信息(A,B,C,D,E,F,G,H) 输出:The dancepartners: A—B C—D E—F G is waiting for a partner. 实验分析: 1.队列的操作特点; 2.列举调试运行过程中出现的错误并分析原因。 要求: (1) 程序要添加适当的注释,程序的书写要采用缩进格式。 (2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。 (3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。 (4) 上传源程序到课堂派。顺序表的源程序保存为dancepartner.cpp。

#pragma GCC optimize(2) #include<bits/stdc++.h> using namespace std; #define pi acos(-1.0) #define e exp(1.0) typedef long long ll; ll N,M; string S; //string men,women; //struct Dancer //{ // char name; //}; struct Lnode//定义队列结点 { char date; Lnode *next; }; struct Queue { ll size;//队列元素的个数 Lnode *front,*rear;//指向头结点和尾结点 }Q1,Q2; //Lnode *front,*rear; void Init(Queue &Q)//初始化 { Q.front=Q.rear=NULL; Q.size=0; return ; } bool Empty(Queue &Q)//判断队列是否为空 { if(!Q.size) return true; return false; } void Push(char c,Queue &Q)//将信息Push到队列Q里 { Lnode *pos=new Lnode; pos->date=c; pos->next=NULL; if(Empty(Q)) Q.front=pos; else Q.rear->next=pos; Q.rear=pos; Q.size++; return ; } void Front(Queue &Q)//打印队列头结点 { if(Empty(Q)) { cout<<"队列已空"<<endl; return ; } cout<<Q.front->date; return ; } void Pop(Queue &Q)//删除头结点 { if(Empty(Q)) { cout<<"队列已空"<<endl; return ; } Lnode *pos=Q.front; Q.front=Q.front->next; delete pos; Q.size--; return ; } int main() { // freopen(".../.txt","w",stdout); ios::sync_with_stdio(false); cout<<"请输入舞者"<<endl; while(cin>>S) { ll i,j; Init(Q1);//建立队列 Init(Q2); for(i=0;i<S.length();i++) { if(!(i&1)) Push(S[i],Q1); else Push(S[i],Q2); } while(!Empty(Q1)&&!Empty(Q2))//进行匹配 { Front(Q1); cout<<"---"; Front(Q2); cout<<endl; Pop(Q1); Pop(Q2); } while(!Empty(Q1))//将没有匹配的输出出来,实际上循环只会执行一次 { Front(Q1); cout<<" is waiting for a partner."<<endl; Pop(Q1); } while(!Empty(Q2)) { Front(Q2); cout<<" is waiting for a partner."<<endl; Pop(Q2); } } return 0; }
最新回复(0)