队列的基本操作(顺序结构)C/C++
来源:互联网 发布:矩阵论杨明课后答案 编辑:程序博客网 时间:2024/06/04 23:37
顺序结构的队列,大多情况下对空间的申请比较死,想了个办法:用string形式来存储队列元素,对于new的方式,我也实在想不出够准确的申请方法。
C语言式:
#include <iostream>#include <memory.h>using namespace std;struct Queue{ char data[1024]; int front,rear ;};void initQueue(Queue *q){ q->front=q->rear=0; memset(q->data,0,1024);}bool Isfull(Queue *q){ return q->rear==1024;}char pop(Queue *q){ return q->data[q->front++];}void push(Queue *q,char c){ q->data[q->rear++]=c;}int Isempty(Queue *q){ if(q->front==q->rear) return 1; return 0;}int main(){ Queue q; initQueue(&q); for(char i='a';i<='z';i++) { if(!Isfull(&q)) push(&q,i); } while(!Isempty(&q)) cout<<pop(&q)<<" "; return 0;}
C++版:
注意!
realloc()的作用是对之前用malloc()/calloc()分配的空间修改大小,而不是分配新空间,realloc()修改过的空间地址和之前的相同,除非之前的地址开始的连续空间不如修改后的空间大,中这种情况下,它会在其它地方分配一块新大小的空间,并将原空间保存的内容复制到新空间中,然后释放原空间。简单的说,就是这里应该用malloc()分配新空间,而不是realloc()修改先前分配的空间。
#include <iostream>#include <memory.h>#include <stdlib.h>using namespace std;int size = 10;struct Queue{ char *data; int front,rear ;};void initQueue(Queue *q){ q->front=q->rear=0; q->data=(char*)calloc(size,sizeof(char));}bool Isfull(Queue *q){ return q->rear==10;}char pop(Queue *q){ return q->data[q->front++];}void push(Queue *q,char c){ q->data[q->rear++]=c; if(q->rear>=size-1) //如果空间不够,就用realloc重置data的空间大小 { size=2*size; while(!(q->data=(char*)realloc(q->data,sizeof(char)))) q->data=(char*)realloc(q->data,size*sizeof(char)); }}int Isempty(Queue *q){ if(q->front==q->rear) return 1; return 0;}int main(){ Queue q; initQueue(&q); for(char i='a';i<='z';i++) { push(&q,i); } while(!Isempty(&q)) cout<<pop(&q)<<" "; return 0;}
#include <iostream>#include <memory.h>#include <string>using namespace std;struct Queue{ string data;//不用担心溢出了,不过感觉有点变味了 int front,rear ;};void initQueue(Queue *q){ q->front=q->rear=0;}char pop(Queue *q){ return q->data[q->front++];}void push(Queue *q,char c){ q->data.push_back(c);//因为这里用了pushback,所以感觉能实现功能但是怪怪的 q->rear++;}int Isempty(Queue *q){ if(q->front==q->rear) return 1; return 0;}int main(){ Queue q; initQueue(&q); for(char i='a';i<='z';i++) { push(&q,i); } while(!Isempty(&q)) cout<<pop(&q)<<" "; return 0;}
主要是,我觉得上面C++的方式能够省去判满的步骤
大家有好的办法的话,可以分享下。 0 0
- 队列的基本操作(顺序结构)C/C++
- 顺序队列(循环队列)基本操作实现 C语言
- 顺序表的基本操作(C++)
- 链队列的基本操作(C++)
- C语言:顺序结构(数组)的循环队列
- 数据结构之顺序队列的操作(C语言)
- 数据结构之顺序队列的操作(C语言)
- C语言的几种基本顺序结构(19)
- 【C++/数据结构】顺序表的基本操作
- C语言顺序表的基本操作
- C语言顺序栈的基本操作
- C语言链队列的基本操作
- c实现队列的基本操作
- 顺序队列的基本操作
- 顺序队列的基本操作
- 顺序队列的基本操作;
- 顺序队列的基本操作
- 顺序队列的基本操作
- C语言对指针形参分配内存空间
- Jni开发所遇见的问题
- MyEclipse2015创建Maven Web聚合工程实现分层思想
- 蓝桥基础练习 杨辉三角形
- SEED实验:缓冲区溢出漏洞实验__山东大学网络攻防实验
- 队列的基本操作(顺序结构)C/C++
- Android自定义View-下拉刷新控件
- android handler与eventbus对比
- 狄利克雷过程(Dirichlet Process)
- android studio 2.2改变主题字体大小
- 以备查阅
- GsonFormat,Json实体类快速生产的插件
- SVN学习笔记
- 蓝桥基础练习 杨辉三角形