C语言的队列如何实现和表示

 我来答
qwertiesy
推荐于2017-09-07 · TA获得超过134个赞
知道答主
回答量:88
采纳率:100%
帮助的人:46.9万
展开全部
我能想到的有两种方法(假设队列元素都是int)
一,用链表的方法
struct A
{
int n;
struct A *a;
} *p,*head,*rear;
head=rear=NULL;/*头指针,尾指针*/
添加元素:p=(struct A*)malloc(sizeof(struct A));......给新元素赋值.....;rear->a=p;rear=p;
当然添加第一个元素的时候要给head赋值。
删除元素:p=head;head=head->a;free(p);
用的是单向链表,当然也可以用双向链表,不过删除,添加元素的过程要麻烦点。
二,利用数组,当然也可以开辟动态储存空间
int a[N],*head,*rear; N就是个常数
head=rear=a;
添加元素:scanf("%d",rear-a==N?rear=a:++rear);
删除元素:head-a==N?head=a:head++;
当然要检查队列是否溢出,可以设变量n=0;
每次添加元素n++
每次删除元素n--
当n<0后n>N数据溢出
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
钟静秋
2011-09-24 · TA获得超过214个赞
知道答主
回答量:512
采纳率:0%
帮助的人:227万
展开全部
#include <stdio.h>
#include <string.h>
#include <windows.h>
#define MAX_STACK 100
void main()
{
char chstr[100];
char stack[MAX_STACK];
int cur_pos = -1;

while(1)
{
system("cls");
printf("-----------------------队列操作-------------------------\n");
printf("***0: POP ***-1: GAMEOVER ***1-9: PUSH\n");
printf("Example:\n");
printf(" 0[ENTER] -1[ENTER] 1abcd[ENTER]或者2abcd[ENTER]\n");

fflush(stdin);
gets(chstr);
if(chstr[0] == '-' && chstr[1] == '1' && strlen(chstr) == 2)
break;
else if(chstr[0] =='0' && strlen(chstr) == 1)
{
if(cur_pos == -1)
{
printf("%%error: stack empty, can not pop!\n");
continue;
}
cur_pos --;
printf("pop [%c] out\n", stack[cur_pos + 1]);
}
else if(chstr[0] >= '1' && chstr[0] <= '9')
{
int p = 1;
while(chstr[p] != 0 && cur_pos < MAX_STACK)
{
cur_pos++;
stack[cur_pos] = chstr[p++];
printf("push [%c] in\n", chstr[p - 1]);
if(cur_pos == MAX_STACK - 1 && chstr[p] != 0)
{
printf("%%error: cannnot push [%c]: stack full\n", chstr[p]);
break;
}
}
}
else
printf("%%error: Unknow operation!\n");
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
琴秀曼Bp
2011-09-23 · TA获得超过690个赞
知道小有建树答主
回答量:615
采纳率:0%
帮助的人:667万
展开全部
可以使用数组或链表。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
scj251190323
2011-09-23
知道答主
回答量:41
采纳率:0%
帮助的人:22.1万
展开全部
数组喽
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式