-
数据结构是指 一种或多种特定关系的数据元素的集合查看全部
-
模拟排号机,只需改动一下内容,运行结果如图 void MyQueue::QueueTraverse () { for(int i=m_iHead;i<m_iQueueLen+m_iHead;i++)//m_iQueueLen+m_iHead保证循环次数不会出错,防止当头为1,长度为3时只能循环两次,队列长度指挥循环次数 { m_pQueue[i%m_iQueueCapacity].printInfo ();//直接调用类中有的打印函数,不需要再用cout cout<<"前面还有"<<(i-m_iHead)<<"人"<<endl;//模拟排号机 } }查看全部
-
主函数中的应用: #include<iostream> #include<stdlib.h> #include"MyQueue.h" #include"Customer.h" using namespace std; int main(void) { MyQueue *p=new MyQueue(4); Customer c1("marry",20);//因为不再是int类型所以要定义对象 Customer c2("jack",22); Customer c3("tom",24); p->EnQueue (c1); p->EnQueue (c2); p->EnQueue (c3); p->QueueTraverse (); //在队列中删除元素并且获得元素的值 Customer c4("",0);//定义一个这样的元素c4,c4是一个没有其他值得对象,用这个对象来获取队列的第一个元素,相当于之前的int e=0; p->DeQueue (c4);//把第一个元素给c4,在删掉第一个元素 c4.printInfo ();//打印c4(即第一个元素) p->QueueTraverse ();//遍历剩余两个 delete p; p=NULL; return 0; }查看全部
-
环形队列的实际应用,定义customer类 #ifndef CUSTOMER_H #define CUSTOMER_H #include<string> using namespace std; class Customer { public: Customer(string name="",int age=0);//需要有默认构造函数去使队列的构造函数成立,每个参数赋初值 void printInfo() const; private: string m_strName; int m_iAge; }; #endif #include<iostream> #include<stdlib.h> #include<string> #include"Customer.h" using namespace std; Customer::Customer(string name,int age) { m_strName=name; m_iAge=age; } void Customer::printInfo() const { cout<<"名字"<<m_strName<<endl; cout<<"年龄"<<m_iAge<<endl; cout<<endl; } 因为不再是int类型,所以队列类中要改变一些数据类型,函数类型,如下: (public下的)bool EnQueue(Customer element);//Customer类型的元素,下同,实现要保持一致(略) bool DeQueue(Customer &element); (private下的)Customer *m_pQueue;//Customer类型的指针 遍历的循环体要有所改动: //实际应用循环体要有所改动 void MyQueue::QueueTraverse () { for(int i=m_iHead;i<m_iQueueLen+m_iHead;i++)//m_iQueueLen+m_iHead保证循环次数不会出错,防止当头为1,长度为3时只能循环两次,队列长度指挥循环次数 { m_pQueue[i%m_iQueueCapacity].printInfo ();//直接调用类中有的打印函数,不需要再用cout } }查看全部
-
接图片代码: p->QueueTraverse ();//发现至此不能遍历出来,因此遍历实现有误,需更正 【更正: void MyQueue::QueueTraverse () { for(int i=m_iHead;i<m_iQueueLen+m_iHead;i++)//m_iQueueLen+m_iHead保证循环次数不会出错,防止当头为1,长度为3时只能循环两次,队列长度指挥循环次数 { //cout<< m_pQueue[i%m_iQueueLen] <<endl;//防止下标i溢出,环形队列头不一定从[0]开始 cout<< m_pQueue[i%m_iQueueCapacity] <<endl;//更正应对m_iQueueCapacity取余,对常数容量取余 } cout<<endl;//为了清晰 }】 p->ClearQueue (); p->QueueTraverse (); p->EnQueue (20); p->EnQueue (30); p->QueueTraverse (); delete p; p=NULL; return 0; }查看全部
-
环形队列实现部分二:(重点部分) bool MyQueue::EnQueue (int element) { if(QueueFull()){return false;} else { m_pQueue[m_iTail]=element; m_iTail++; m_iTail=m_iTail%m_iQueueCapacity;//防止下标溢出 m_iQueueLen++;//长度随时改变 return true;//告诉系统插入成功 } } bool MyQueue::DeQueue (int &element) { if(QueueEmpty()){return false;} else { element=m_pQueue[m_iHead];//首元素摘出 m_iHead++;//改变头位置 m_iHead=m_iHead%m_iQueueCapacity;//防止下标溢出 m_iQueueLen--;//减少个数 return true; } } void MyQueue::QueueTraverse () { for(int i=m_iHead;i<m_iQueueLen;i++) { cout<< m_pQueue[i%m_iQueueLen] <<endl;//防止下标i溢出,环形队列头不一定从[0]开始 } }查看全部
-
环形队列实现部分一: #include"MyQueue.h" #include<iostream> using namespace std; MyQueue::MyQueue(int queueCapacity)//构造函数用来创建队列 { m_iQueueCapacity=queueCapacity; /*m_iHead=0; m_iTail=0; m_iQueueLen=0;*/ ClearQueue(); m_pQueue=new int[m_iQueueCapacity]; } MyQueue::~MyQueue () { delete []m_pQueue; m_pQueue=NULL; } void MyQueue::ClearQueue () { m_iHead=0; m_iTail=0; m_iQueueLen=0; } bool MyQueue::QueueEmpty () const { if(m_iQueueLen==0) { return true; } else { return false; } //return m_iQueueLen==0?true:false; } int MyQueue::QueueLength () const { return m_iQueueLen; } bool MyQueue::QueueFull () const { if(m_iQueueLen==m_iQueueCapacity) {return true;} else{return false;} }查看全部
-
队列的定义 c++//c对比 c++有自己的数据成员所以不需要参数,而要指明数据类型,因为已经指明数据类型,所以不需要visit函数(遍历不同种类型时要用的函数)查看全部
-
数据结构概念查看全部
-
队列 先进先出查看全部
-
环形队列,,内存没有空着效率高;内存中的数据也不用整体移动查看全部
-
环形队列查看全部
-
队列的用途查看全部
-
环形队列查看全部
-
普通队列查看全部
举报
0/150
提交
取消