求助C语言的问题"用数组实现顺序队列"
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助C语言的问题"用数组实现顺序队列"相关的知识,希望对你有一定的参考价值。
用数组实现顺序队列。功能要求:实现一个存放整数的队列,提示用户输入初始化的6个整数放进队列里,然后提示用户向队列插入一个新的整数,显示插入后队列的数据,执行出队列操作(将队头元素删去),显示出队列后队列中的数据。
例如:用户输入初始化的6个整数1 2 3 4 5 6后,队列显示:1 2 3 4 5 6
用户向队列插入一个新的整数7后,队列显示:1 2 3 4 5 6 7
执行出队列操作,显示出队的值为1
显示出队列后队列中的数据为:2 3 4 5 6 7
程序分析:
(1)声明1个较大的整数数组存放队列数据,声明2个整型变量作为队头和队尾的指示
(2)入队时队尾指示加1
(3)出队时队头指示加1
#include<stdio.h>
#define N 200 //预设队列大小
int queue[N];
int flag=0; //队列标识 0为不存在,1为存在
int front=0,rear=0; //队列头,队列尾
void creat() //创建队列
if(flag==1)
printf("队列已经存在。");
else
for(int i=0;i<6;i++)
printf("输入初始化的第%d数:",i);
scanf("%d",&(queue[i]));
rear=5; flag=1;
void enqueue() //进队列
if(flag==0)
printf("当前还没有队列,请先创建队列:");
else
printf("输入进入队列的元素:");
scanf("%d",&queue[rear+1]);
rear++;
void gethead() //出队列
if(flag==0)
printf("当前还没有队列,请先创建队列:");
else
printf("出队列的元素:%d",queue[front]);
front++;
printf("\n出列后的队列为:");
for(int i=front;i<=rear;i++)
printf("%d ",queue[i]);
void print() //打印当前队列
printf("\n当前队列为:");
for(int i=0;i<=rear;i++)
printf("%d ",queue[i]);
int main()
int servse=-1; //服务标识
while(servse!=0)
printf("\n1.创建队列\n");
printf("2.元素进队\n");
printf("3.元素出列\n");
printf("4.打印队列\n");
printf("0.退出\n");
printf("选择:");
scanf("%d",&servse);
switch(servse)
case 1:creat();break;
case 2:enqueue();break;
case 3:gethead();break;
case 4:print();break;
case 0:return 0;break;
参考技术A 不难,多看看书, 参考技术B 根据题目要求,要考虑当队尾指示元素到达数组末尾而队头指示变量不是数组第一个元素时的情况(此时队列中尚有可利用空间),故程序如下:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct _Queue
int head;
int tail;
int store[MAX];
Queue;
In(Queue * pQ,int ele)
if(((pQ->tail)+1)%MAX==pQ->head)
printf("The Queue is full!\n");
return 0;
else
pQ->store[pQ->tail]=ele;
pQ->tail=((pQ->tail)+1)%MAX;
return 1;
int Out(Queue *pQ)
int re;
if(pQ->head==pQ->tail)
printf("The Queue is empty!\n");
exit(0);
else
re=pQ->store[pQ->head];
pQ->head=((pQ->head)+1)%MAX;
return re;
void PrintEle(Queue *pQ)
int th=pQ->head;
while(th%MAX!=pQ->tail)
printf("%3d",pQ->store[th]);
th++;
printf("\n");
void InitQueue(Queue *pQ)
pQ->head=0;
pQ->tail=0;
void main()
int n=0,num=0;
Queue mQ;
InitQueue(&mQ);
/* 从键盘得到队列元素,当输入65535时结束*/
printf("Input elements for the Queue(input 65535 exit):\n");
scanf("%d",&n);
while(n!=65535)
In(&mQ,n);
printf("The next one:\n");
scanf("%d",&n);
printf("The Queue is:\n");
PrintEle(&mQ);
/*输入出队元素个数*/
printf("Now Input the number of the element which you want get out from the Queue:\n");
scanf("%d",&num);
n=num;
while(num)
num--;
printf("Get %d element!\nThe Queue is:",n-num);
Out(&mQ);
PrintEle(&mQ);
printf("\n");
参考技术C #include
"stdafx.h"
#include<stdio.h>
#define
N
200
//预设队列大小
int
queue[N];
int
flag=0;
//队列标识
0为不存在,1为存在
int
front=0,rear=0;
//队列头,队列尾
void
creat()
//创建队列
if(flag==1)
printf("队列已经存在。");
else
for(int
i=0;i<6;i++)
printf("输入初始化的第%d数:",i);
scanf("%d",&(queue[i]));
rear=5;
flag=1;
void
enqueue()
//进队列
if(flag==0)
printf("当前还没有队列,请先创建队列:");
else
printf("输入进入队列的元素:");
scanf("%d",&queue[rear+1]);
rear++;
void
gethead()
//出队列
if(flag==0)
printf("当前还没有队列,请先创建队列:");
else
printf("出队列的元素:%d",queue[front]);
front++;
printf("\n出列后的队列为:");
for(int
i=front;i<=rear;i++)
printf("%d
",queue[i]);
void
print()
//打印当前队列
printf("\n当前队列为:");
for(int
i=0;i<=rear;i++)
printf("%d
",queue[i]);
int
main()
int
servse=-1;
//服务标识
while(servse!=0)
printf("\n1.创建队列\n");
printf("2.元素进队\n");
printf("3.元素出列\n");
printf("4.打印队列\n");
printf("0.退出\n");
printf("选择:");
scanf("%d",&servse);
switch(servse)
case
1:creat();break;
case
2:enqueue();break;
case
3:gethead();break;
case
4:print();break;
case
0:return
0;break;
关于C语言的结构体中元素的筛选,排列顺序。
这是我写的一个程序。先定义了一个结构体person,结构体类型数组per和结构体类型指针,p,q。我是想从结构体数组中,按照字母顺序,从小到大的,把姓名排列,并且输出。我是一个初学者啊,希望高手能帮我看看,我的这个程序怎么出错了,应该怎么改正。谢谢大家了~~~
#include "stdafx.h"
#include "string"
void main()
struct person
char name[20];
char sex;
int age;
float height;
per[7]="Li Ping",'M',22,178.2,"Gao Ming",'F',23,171.5,"Zhao Er",'F',32,168.6,"Wang Ying",'F',20,158.9,"Zhang Xiao",'M',25,181.0,"Deng Tao",'M',27,177.6,"Hao San",'F',22,175.7,;
struct person *p;
struct person *q;
q=p=per;
for(;p<per+7;p++)
if(strcmp(p->name,(p+1)->name)>0)
*q=*(p+1);
*(p+1)=*p;
*p=*q;
printf("name=%-18s,sex=%3c,age=%4d,height=%7.2f\n",p->name,p->sex,p->age,p->height);
只要改一点点就好了,写注释的地方就是改动的地方。
#include "stdafx.h"
#include "string"
void main()
struct person
char name[20];
char sex;
int age;
float height;
per[7]="Li Ping",'M',22,178.2,"Gao Ming",'F',23,171.5,"Zhao Er",'F',32,168.6,"Wang Ying",'F',20,158.9,"Zhang Xiao",'M',25,181.0,"Deng Tao",'M',27,177.6,"Hao San",'F',22,175.7,;
struct person *p;
struct person q; //这行,去了*
for (int i = 0; i < 7; i++) //这行,新加的
for(p = per; p < per+7; p++) //这行,加了p=per
if(strcmp(p->name,(p+1)->name)>0)
q=*(p+1); //这行,去了*
*(p+1)=*p;
*p=q; //这行,去了*
//下面这几行,最后循环一次输出排序的结果
for(p = per; p < per+7; p++)
printf("name=%-18s,sex=%3c,age=%4d,height=%7.2f\n",p->name,p->sex,p->age,p->height);
本回答被提问者采纳 参考技术B 结构体在C中属于复杂类型,不能用一个"="就把全部内容赋给另一个变量。所以对结构体数组排序时最好是另建一个结构体型指针数组(如改过的代码中的*这[7]),指针是简单变量,按要求对这个指针数组进行排序就简单了……////////////后是有改动的,自己看,可续问。
#include "stdio.h"//
#include "string.h"//
void main(void)//
struct person
char name[20];
char sex;
int age;
float height;
per[7]="Li Ping",'M',22,178.2,
"Gao Ming",'F',23,171.5,
"Zhao Er",'F',32,168.6,
"Wang Ying",'F',20,158.9,
"Zhang Xiao",'M',25,181.0,
"Deng Tao",'M',27,177.6,
"Hao San",'F',22,175.7,;
struct person *p[7],*q;/////////////////////////////
int i,j;
for(i=0;i<7;i++)
p[i]=&per[i];
q=per;
for(i=0;i<6;i++)
for(j=i+1;j<7;j++)
if(strcmp(p[i]->name,p[j]->name)>0)
q=p[i];
p[i]=p[j];
p[j]=q;
printf("name=%-18s,sex=%3c,age=%4d,height=%7.2f\n",p[i]->name,p[i]->sex,p[i]->age,p[i]->height);
以上是关于求助C语言的问题"用数组实现顺序队列"的主要内容,如果未能解决你的问题,请参考以下文章
《线性表的插入和删除算法实现》以及《栈和队列的插入和删除算法实现》的c语言代码