非常简单的队列问题求指教

欢欣之雨 2011-11-19 11:29:48

#include <stdio.h>
#include <malloc.h>
#include <conio.h>


typedef struct node
{
char data;
struct node *next;
}Qnode,*Qlink;
typedef struct
{ Qnode *front,*rear;
}linkqueue,*link;


void Creatqueue(link q)
{
q->front=(Qlink)malloc(sizeof(Qnode));
q->front->next=NULL;
q->rear=q->front;
}

void Clearqueue(link q)
{
q->front=q->rear=(Qlink)malloc(sizeof(Qnode));
q->front->next=NULL;
}


int Emptyqueue(link q)
{
if(q->front==q->rear) return 1;
else return 0;
}

void Enqueue(link q,char e)
{
Qlink p;
p=(Qlink)malloc(sizeof(Qnode));
p->data=e;
p->next=NULL;
q->rear->next=p;
q->rear=p;
}

char Dequeue(link q)
{
Qlink p;
if(Emptyqueue(q)) return NULL;
else
{
p=q->front;
q->front=p->next;
free(p);
return q->front->data;
}
}

void main()
{
char e,flag=0;link S;
Creatqueue(S);
do
{
printf("请输入字符X\n");
e=getchar();
switch(e)
{
case '0':Dequeue(S);break;
case '@':while(S->front!=S->rear)
{
printf("%c",Dequeue(S));
}
printf("%c",Dequeue(S));
flag=1;
break;
default:Enqueue(S,e);
}
}
while(flag==0);

}




X≠‘@’and X ≠‘0’
X入队
X =‘0’
出队
X =‘@’
打印队中各元素,并且停止


编译通过了,运行时文件不能写,关于这个错误我总是找不到问题在哪。求高手指教~
...全文
75 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
欢欣之雨 2011-11-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xxyxxb 的回复:]
C/C++ code


#include <stdio.h>
#include <malloc.h>

typedef struct node
{
char data;
struct node *next;
}Qnode,*Qlink;
typedef struct
{
Qnode *front,*rear;
}linkqueue,*link;……
[/Quote]

非常感谢,我想问问是不是一定要在主函数分配空间,在Creat函数中再申请不行吗?麻烦再解答一下
小笨同学 2011-11-19
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <malloc.h>

typedef struct node
{
char data;
struct node *next;
}Qnode,*Qlink;
typedef struct
{
Qnode *front,*rear;
}linkqueue,*link;


void Creatqueue(link q)
{
q->front=(Qlink)malloc(sizeof(Qnode));
q->front->next=NULL;
q->rear=q->front;
}

void Clearqueue(link q)
{
q->front=q->rear=(Qlink)malloc(sizeof(Qnode));
q->front->next=NULL;
}


int Emptyqueue(link q)
{
if(q->front==q->rear)
return 1;
else
return 0;
}

void Enqueue(link q,char e)
{
Qlink p;
p=(Qlink)malloc(sizeof(Qnode));
p->data=e;
p->next=NULL;
q->rear->next=p;
q->rear=p;
}

char Dequeue(link q)
{
Qlink p;
if(Emptyqueue(q)) return 0; //NULL 不是char 类型
else
{
p=q->front;
q->front=p->next;
free(p);
return q->front->data;
}
}

int main(void)
{
char e,flag=0;
link S;
S = malloc(sizeof(linkqueue)); //一定要分配空间
Creatqueue(S);
do
{
printf("请输入字符X\n");
e = getchar();
while(getchar() != '\n') //清空缓冲区
;
switch(e)
{
case '0':Dequeue(S);break;
case '@':while(S->front!=S->rear)
{
printf("%c",Dequeue(S));
}
printf("%c",Dequeue(S));
flag=1;
break;
default:Enqueue(S,e);
}
}
while(flag == 0);

return 0;
}
小笨同学 2011-11-19
  • 打赏
  • 举报
回复
可以的,Creatqueue(&S);
函数原型为 void Creatqueue(link *q); //这其实是相当于 linkqueue **p

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧