q.push(m); // queue是C++STL模板库的东西,需要使用push来插入元素,详细信息你可以参考MSDN来了解其使用及内容。
为连云等地区用户提供了全套网页设计制作服务,及连云网站建设行业解决方案。主营业务为成都网站设计、做网站、连云网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
#includestdio.h
#includestring.h
#includestdlib.h
#includeiostream.h
#define TURE 1
#define FALSE 0
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define MAXQSIZE 100
typedef int qelemtype;
typedef int status;
typedef struct{
qelemtype *base;
int front;
int rear;
}sqqueue;
status initqueue(sqqueue q){
q.base=(qelemtype*)malloc(MAXQSIZE*sizeof(qelemtype));
if(!q.base)exit(OVERFLOW);
q.front=q.rear=0;
return OK;
}//构造一个空队列
void visit(int y){
y=2*y;
couty" ";
}
status destroyqueue(sqqueue q){
while(q.front){
q.rear=q.front;
free(q.base);
q.front=q.rear;
}
return OK;
}//销毁队列
status clearqueue(sqqueue q){
q.front=q.rear=0;
return OK;
}//清空队列
status queueempty(sqqueue q){
if(q.front==q.rear)
return TURE;
return FALSE;
}//若队列为空,返回TURE,否则返回FALSE.
status queuelength(sqqueue q){
return(q.rear-q.front+MAXQSIZE)%MAXQSIZE;
}//返回队列元素个数,即为队列长度
status gethead(sqqueue q,qelemtype e){
if(q.front==q.rear)return ERROR;
e=q.base[q.front];
couteendl;
return OK;
}//若队列不空,则用e返回队列的头元素,并返回OK
status enqueue(sqqueue q,qelemtype e){
if((q.rear+1)%MAXQSIZE==q.front)return ERROR;
q.base[q.rear]=e;
q.rear=(q.rear+1)%MAXQSIZE;
return OK;
}//插入元素e为q的新的队尾元素
status dequeue(sqqueue q,qelemtype e){
if(q.front==q.rear)return ERROR;
e=q.base[q.front];
q.front=(q.front+1)%MAXQSIZE;
return OK;
}//若队列不空,则删除q的队头元素,用e返回其值,并返回OK.
status queuetraverse(sqqueue q,void(*visit)(int p)){
int i=1,p,a;
a=q.front;
p=q.base[a];
while(i=(q.rear-q.front+MAXQSIZE)%MAXQSIZE)
{
visit(p);
a++;
i++;
};
return OK;}
//从队头到队尾依次对队列调用函数visit().
void main(){
sqqueue q;
int a,b,e,i,j,k;
initqueue(q);
cout"初始化后队头地址:"q.baseendl;
cout"新建队列!"endl;
cout"当前队列是否为空:"queueempty(q)endl;
cout"定义队列长度:"endl;
cina;
cout"分别输入队列的各个元素,按ENTER"endl;
for(k=1;k=a;k++){
cinj;
i=enqueue(q,j);}
cout"现队列元素:"endl;
for(b=1;b=a;b++)
coutq.base[b-1]endl;
cout"当前队列长度:"queuelength(q)endl;
cout"当前队头元素:"endl;
gethead(q,e);
cout"删除当前头元素!返回其值"endl;
dequeue(q,i);
coutiendl;
cout"调用函数后队列变为:";
queuetraverse(q,visit);
coutendl;
cout"清空队列!"clearqueue(q)endl;
cout"销毁队列!"destroyqueue(q)endl;
}
我的理解是 你想用数组模拟 队列?不是的话下面不用看,回复我给我再说一下题意,我重新给你写!
首先输入一个操作,1入队,2出队,3退出
如果是1,再输入一个将要入队列的 数据,
#include stdio.h
#include stdlib.h
#include string.h
#define LEN 1000
int queue[LEN], fir, end;
void printQueue()
{
int i = 0;
for(i = fir; i end; ++ i)
{
printf("%d ", queue[i]);
}
printf("\n");
}
void insertQueue()
{
int value = 0, i = 0;
printf("Enter the data which you want to insert to queue...\n");
scanf("%d", value);
queue[end ++] = value;
printQueue();
}
void deleteQueue()
{
printf("after delete the top data!\n");
fir ++;
printQueue();
}
void demo()
{
int Number = 0;
while(1)
{
printf("Enter the number:\n");
printf("1.insert...\n");
printf("2.delete...\n");
printf("3.exit!\n");
scanf("%d", Number);
if(Number 1 || Number 4) return;
switch(Number)
{
case 1: insertQueue(); break;
case 2: deleteQueue(); break;
case 3: exit(0);
default: return;
}
}
}
void creatQueue()
{
int i = 0;
fir = 0, end = 0;
for(i = 0; i LEN; ++ i)
{
queue[i] = 0;
}
}
int main()
{
creatQueue();
demo();
return 0;
}
首先,指针默认只有一个地址的长度的空间,存不了那么多的字符。
其次,传值和传地址一塌糊涂,完全就是乱写么。
scanf的第二个参数是地址,如果本身不是指针则需要取址符。
我给你重写了算了
#includestdio.h
int Retrieve(int array[],int length,int x);/*形参x直接传值就可以了*/
int main()
{
int *a,x;
int length,i;
scanf("%d",length);
a = (int)malloc(sizeof(int)*length); /*申请一个内存空间用来存放数据,或者直接用一个大数组也可以*/