队列第一篇
来源:互联网 发布:ubuntu jira 编辑:程序博客网 时间:2024/05/21 12:37
循环队列:
【1】
利用数组,内存早已分配好;
利用一个已知大小的数组和front,rear两个整型数来计算数值在循环队列的那个位置;
判满:
(q.rear+1)%maxsize==q.front;
判空:
q.rear==q.front;
入队:
q.rear=(q.rear+1)%maxsize;
q.data[q.rear]=e;
出队:
q.front=(q.front+1)%maxsize;
t=q.data[q.front];
初始化:
q.rear=0;
q.front=q.rear ;
#include<cstdio>#include<iostream>#include<algorithm>using namespace std;#define maxsize 50struct squeue{ int data[maxsize]; int front,rear;};void init(squeue &q){ q.rear=0; q.front=q.rear;}int Empty(squeue &q){ if(q.rear==q.front) { return 0; } else { return 1; }}int inqueue(squeue &q,int e){ if((q.rear+1)%maxsize==q.front) { return 0; } q.rear=(q.rear+1)%maxsize; q.data[q.rear]=e; return 1;}int dequeue(squeue &q,int &e){ if(q.rear==q.front) { return 0; } else { q.front=(q.front+1)%maxsize; e=q.data[q.front]; return 1; }}int length(squeue &q){ int l; l=(q.rear-q.front)%maxsize; return l;}int get(squeue &q){ int e; if(q.rear==q.front) { return 0; } else { e=q.data[q.front+1]; return e; }}void destory(squeue &q){ while(q.front!=q.rear) { free(&q.data[q.front]); q.front=(q.front+1)%maxsize; }}int main(){ squeue q; init(q); int e,w; while(cin>>e) { inqueue(q,e); } cout<<length(q)<<endl; cout<<get(q)<<endl; while(Empty(q)) { dequeue(q,w); cout<<w<<endl; } destory(q);}
链队:
[1]一个百度上的链队博客:
http://www.cnblogs.com/bhlsheji/p/5079977.html
[2]另一个:
照一个大佬打的,学一点其他的知识。
构造函数的作用:
初始化对象的数据成员。//感觉应该相当于写了一个初始化队的函数;
构造函数:
构造函数,就是与类(或结构体)同名的函数,它与普通函数的区别在于,它没有返回类型;
构造函数名必须与类名或结构体名一样,
有参构造函数:
class a
{
a(int p);
}
无参构造函数:
class a
{
a();
}
//在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数。
#include<cstdio>#include<cstdlib>struct Node{ Node *next; int data;};struct Queue{ Node *_front,*rear; /// _front作为链表头指针 第一个节点就是队首元素 /// rear记录队尾 若_front==rear则队列为空 Queue() /// 构造函数 { _front=(Node*)malloc(sizeof(Node)); _front->next=NULL; rear=_front; } void Push(int num); int Pop(); int Front(); int Empty(); void Clear(); void Show();};int main(){ Queue q; printf("-----------------------------\n"); printf("选项1:元素进队 选项2:元素出队\n"); printf("选项3:查看队首元素 选项4:检查队列是否为空\n"); printf("选项5:清除队列元素 选项6:查看队列中元素\n"); printf("-----------------------------\n"); int choose; while(~scanf("%d",&choose)) { if (choose<1||choose>6) continue; if (choose==1) { int num; printf("输入进队元素:"); scanf("%d",&num); q.Push(num); } if (choose==2) { int t=q.Pop(); printf("%d\n",t); } if (choose==3) { if (q._front==q.rear) { puts("Error!"); } else { int FrontElem=q.Front(); printf("FrontElem of the queue is %d\n",FrontElem); } } if (choose==4) { if (q.Empty()) puts("Queue is empty."); else puts("Queue is not empty."); } if (choose==5) { q.Clear(); } if (choose==6) { q.Show(); } system("pause"); system("cls"); printf("-----------------------------\n"); printf("选项1:元素进队 选项2:元素出队\n"); printf("选项3:查看队首元素 选项4:检查队列是否为空\n"); printf("选项5:清除队列元素 选项6:查看队列中元素\n"); printf("-----------------------------\n"); } return 0;}void Queue::Push(int num)/// 和链栈一样{ Node *p; p=(Node*)malloc(sizeof(Node)); p->data=num; rear->next=p; p->next=NULL; rear=p; /// rear更新队尾元素 return ;}int Queue::Pop(){ Node *p,*q; int t; p=_front; if (p->next==NULL) { rear=_front; puts("Error!"); return 0; } q=p->next; p->next=q->next; t=q->data; free(q); if (p->next==NULL) /// 如果弹出队首元素后队列为空就要更新rear 否则Front函数会出错 rear=_front; return t;}int Queue::Front(){ return _front->next->data;}int Queue::Empty(){ if (_front->next==NULL) return 1; else return 0;}void Queue::Clear(){ Node *p,*q; p=_front->next; while(p!=NULL) { q=p->next; free(p); p=q; } _front->next=NULL; rear=_front; return ;}void Queue::Show(){ Node *p; p=_front; printf("Front->"); while(p->next!=NULL) { printf("%d->",p->next->data); p=p->next; } puts("NULL"); return ;}
注:
void Queue::pop();
::表示域操作符;
(以类做例子,结构体跟它一样)例如:
声明了一个类a,类a里声明了一个成员函数void e()【int p()】,但是没有在类的声明里给出e()的定义,那么在类外定义e()的函数时,就要写成void a::e();【int a::p()】,表示e()这个函数是a的成员函数。
- 队列第一篇
- 第一篇博客,简单写一下关于消息队列
- 第一篇。
- 第一篇
- 第一篇
- 第一篇
- 第一篇
- 第一篇
- 第一篇
- 第一篇
- 第一篇
- 第一篇
- 第一篇
- 第一篇
- 第一篇
- 第一篇
- 第一篇
- 第一篇
- Pods文件提交到OSChina代码仓库时被忽略
- 太上感应篇0015
- 实战演练 test16 T3
- 太上感应篇0016
- 文章标题
- 队列第一篇
- 大数据学习 第一天
- 一套回顾模板,成长快一点,麻烦少一点
- 乘法爆int的解决方法
- 太上感应篇0017
- 深度神经网络优化(三)- Hyperparameter tuning, Batch Normalization
- 019:初等函数的连续性总结(四则及复合运算)
- 处理 a/b (mod m) 且 b | a 的求解
- 分治