关于c语言数据结构栈与队列的问题、、求帮助

#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstructqnode{chardata[10];... #include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct qnode
{
char data[10];
struct qnode *next;
} QNODE; /*链队结点类型*/
QNODE *front,*rear;
void InitQueue()
{ front=(QNODE *)malloc(sizeof(QNODE));
rear=front;
front->next=NULL;
}
void AddQueue(char x[])
{ QNODE *p;
p=(QNODE *)malloc(sizeof(QNODE));
if(p==NULL) {
printf("内存不足");
exit(1);
}
strcpy(p->data, x);
p->next=NULL;
rear->next=p;
rear=p;
}
void HeadAddQueue(char x[])
{ //在队头插入}
int DelQueue(char x[])
{ QNODE *p;
if (front==rear) return 0; //队空
p=front->next;
strcpy(x, p->data);
ront->next=p->next;
if (p->next==NULL) //最后一个元素出队
rear=front;
free(p);
return 1;
}
int QueueEmpty()
{
if(front==rear) return 1; //队空
else return 0;
}
void DispQueue()
{ QNODE *p=front->next;
while (p!=NULL) {
printf("%s ",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
charsel;
char name[10];
InitQueue(); //初始化队
while (1) {
printf("1:排队 2:办理 3:查看 0:下班 请选择: ");
scanf("%c",&sel); _flushall();
switch(sel) {
case '0': if (!QueueEmpty()) //队不空
printf("请排队的客户明天再来\n");
return;
case '1': printf("输入客户姓名: ");
scanf("%s",name);
_flushall();
//printf("是否优先?(y/n):");
//读入优先级,若是优先者,调用HeadAddQueue函数;否则
AddQueue(name); //入队
break;
case '2': if (!DelQueue(name)) //出队
printf("没有排队的客户\n");
else printf("请客户%s办理\n",name);
break;
case '3': if (QueueEmpty()) //队空
printf("没有排队的客户\n");
else {
printf("排队者:");
DispQueue();
}
break;
default: printf("选择错误,请重新选择。\n");
break;
}
}
}
优先级没有体现出来,另外增加查询功能:给定客户的姓名,显示客户的排队状况(第几个),求帮忙、、
展开
 我来答
百度网友e3120544d
推荐于2016-01-26 · TA获得超过622个赞
知道小有建树答主
回答量:274
采纳率:100%
帮助的人:125万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PRIMAX 100000 //非优先级模式下
typedef struct qnode
{
char data[10];
struct qnode *next;
int priority;//优先级,0的优先级最高,1次之,逐步优先级递减
} QNODE; /*链队结点类型*/
QNODE *front,*rear;
void InitQueue()
{
front=(QNODE *)malloc(sizeof(QNODE));
rear=front;
front->next=NULL;
front->priority = 0;//lzl add
}
void AddQueue(char x[], int prioty)
{
if (prioty<0)
{
printf("\nPriority is not right!\n");
return ;
}
QNODE *p=NULL;
p=(QNODE *)malloc(sizeof(QNODE));
if(p==NULL)
{
printf("内存不足");
exit(1);
}
strcpy(p->data, x);
p->next=NULL;
p->priority = prioty;
//lzl Modify begin
if (front == rear || prioty==PRIMAX)//空队列或非优先级模式
{
rear->next = p;
rear = p;
return ;
}

if (front!=rear && rear->priority <= prioty)
{
rear->next = p;
rear = p;
}
else
{
if (p->priority<front->next->priority)
{
p->next = front->next;
front->next = p;
}
else
{
QNODE *temp = front;
while (temp != NULL && (temp->priority)>=(p->priority))
{
//实际上temp值是不会等于NULL
//因为前面已对尾部节点的优先级做判断
temp = temp->next;
}
p->next = temp->next;
temp->next = p;
}
}
//lzl Modify end
}
void HeadAddQueue(char x[])
{ //在队头插入
}
int DelQueue(char x[])
{
QNODE *p;
if (front==rear)
return 0; //队空
p=front->next;
strcpy(x, p->data);
front->next=p->next;
if (p->next==NULL) //最后一个元素出队
rear=front;
free(p);
return 1;
}
int QueueEmpty()
{
if(front==rear)
return 1; //队空
else
return 0;
}
void DispQueue(int iAll)
{
QNODE *p=front->next;
int i=1;
printf("\n");
if (iAll==1)//输出队列中全部名称
{
while (p!=NULL)
{
printf("第%d位 名字%s\n",i,p->data);
p=p->next;
i++;
}
printf("\n");
}
else//单个客户查找
{
char cName[10]={0};
printf("\n用户名:");
scanf("%s",cName);
while (p!=NULL && strcmp(p->data,cName)!=0 )
{
p = p->next;
i++;
}
if (p == NULL)
{
printf("\n没有找到该客户");
}
else
{
printf("\n客户信息:第%d位 名字%s",i,p->data);
}

}
}
void main()
{
char sel;
char name[10];
int priority=0;
char ch;
InitQueue(); //初始化队
while (1)
{

printf("\n\t\t\t 1:进入排队");
printf("\n\t\t\t 2:办理业务");
printf("\n\t\t\t 3:查看个体");
printf("\n\t\t\t 4:查看全部");
printf("\n\t\t\t 0:下班");
printf("\n请选择:");

//_flushall();
fflush(stdin);
scanf("%c",&sel);

switch(sel)
{
case '0':
if (!QueueEmpty()) //队不空
printf("请排队的客户明天再来\n");
return;
case '1':
printf("输入客户姓名: ");
scanf("%s",name);
_flushall();
printf("是否优先?(y/n):");
scanf("%c",&ch);

if (ch=='Y'||ch=='y')
{
//读入优先级
printf("优先级:");
scanf("%d",&priority);
AddQueue(name,priority); //入队
}
else
{
AddQueue(name,PRIMAX);
}
break;
case '2':
if (!DelQueue(name)) //出队
printf("没有排队的客户\n");
else
printf("请客户%s办理\n",name);
break;
case '3':
case '4':
if (QueueEmpty()) //队空
printf("没有排队的客户\n");
else
{
printf("排队者:");
//sel-'3'值为0表示单个客户查询,值为1表示查询全部
DispQueue(sel-'3');
}
break;
default:
printf("选择错误,请重新选择。\n");
break;
}
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式