#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct qnode{
ElemType data;
struct qnode *next;
}qnode;
typedef struct {
qnode *front;
qnode *rear;
}LQUEUE;
void InitQueue(LQUEUE * &q)
{ qnode *p;
p=(qnode *)malloc(sizeof(qnode));
if(!p) exit(-2);
p->next=0;
q->front= q->rear=p;
}
void EnQueue(LQUEUE *q,ElemType x)
{ qnode *s;
s=(qnode *)malloc(sizeof(qnode));
s->data=x;s->next=NULL;
if (q->front==NULL&&q->rear==NULL)
{q->rear=q->front=s;}
else
q->rear->next=s; q->rear=s;
}
int Empty(LQUEUE *q)
{if (q->front==NULL&&q->rear==NULL)
return 1 ;
else
return 0;
}
int delQueue(LQUEUE *q,ElemType &x)
{ qnode *p;
if(Empty(q)){
printf("\n Queue is free!");
return 0;}
p=q->front;
x=p->data;
if(q->rear==q->front)
q->rear=q->front=NULL;
free(p);
return 1;
}
void main()
{
int n,e;
LQUEUE *l;
InitQueue(l);
printf("Please input number,end with 0:\n");
scanf("%d",&n);
while(n==0)
{
EnQueue(l,n);
}
while(!Empty(l))
{
delQueue(l,e);
printf("%3d",e);
}
printf("\n");
}
编译没有问题,就是生成exe执行文件时,系统报错说内存不可写什么的!求大神指教啊
你的问题是出现在函数参数的传递中,因为你是传是指针而你又在函数里改变了指针的指向,那外面的实参却没有改变,所以会说内存不可用(因为你malloc的堆内存的地址是给了函数里面的形参,而main函数中的实参并没有接受到malloc堆的地址)解决问题的办法就把LQUEUE*改成LQUEUE**。逻辑没什么问题,还有C语言中没有引用,那是C++的,别混淆。
修改后的
#include<stdio.h>G:\数据结构\实验\queue.cpp(60) : error C2664: 'InitQueue' : cannot convert parameter 1 from 'LQUEUE ** ' to 'LQUEUE *& '
A reference that is not to 'const' cannot be bound to a non-lvalue
像你说的那样出现的编译问题
用指针也可以,但千万别在函数里面修改q的指向就行可以
scanf("%d", &an);那为什么程序出来,结果是混乱的数字?没有达到理想效果
追答错误挺多的,简单改了一下,可以了。
#include
#include
#include
typedef int ElemType;
typedef struct qnode{
ElemType data;
struct qnode *next;
}qnode;
typedef struct {
qnode *front;
qnode *rear;
}LQUEUE;
void InitQueue(LQUEUE * &q)
{
// qnode *p;
// p=(qnode *)malloc(sizeof(qnode));
// if(!p) exit(-2);
// p->next=0;
q->front= q->rear=NULL;
}
void EnQueue(LQUEUE *q,ElemType x)
{ qnode *s;
s=(qnode *)malloc(sizeof(qnode));
s->data=x;s->next=NULL;
if (q->front==NULL&&q->rear==NULL)
{q->rear=q->front=s;}
else
q->rear->next=s; q->rear=s;
}
int Empty(LQUEUE *q)
{if (q->front==NULL&&q->rear==NULL)
return 1 ;
else
return 0;
}
int delQueue(LQUEUE *q,ElemType &x)
{ qnode *p;
if(Empty(q)){
printf("\n Queue is free!");
return 0;}
p=q->front;
x=p->data;
if(q->rear==q->front)
q->rear=q->front=NULL;
else
q->front = p->next;
free(p);
return 1;
}
void main()
{
int n,e;
LQUEUE *l = (LQUEUE *)malloc(sizeof(LQUEUE));
InitQueue(l);
printf("Please input number,end with 0:\n");
scanf("%d",&n);
while(n!=0)
{
EnQueue(l,n);
scanf("%d",&n);
}
while(!Empty(l))
{
delQueue(l,e);
printf("%3d",e);
}
printf("\n");
}
好像改了要出错吧
追答q的指向不能直接被修改啊
链式队列打印输出队列元素,我这样哪里错了?
第一个结构体定义是不是有一点问题,不喜欢这种教科书上的代码风格 定义结构体就干干净净的 struct strt { int data; struct strt* next; };
求数据结构试题…重点
1.3数据的逻辑结构指数据元素之间的逻辑关系,用一个数据元素的集合定义在此集合上的若干关系来表示,数据结构可以分为三种:线性结构、树结构和图。1.4:数据元素及其关系在计算机中的存储表示称为数据的存储结构,也称为物理结构。 数据的存储结构基本形式有两种:顺序存储结构和链式存储结构。 2.1:算法:一个算法是一个有...
c语言重点
(1) 下面叙述正确的是(C)A. 算法的执行效率与数据的存储结构无关B. 算法的空间复杂度是指算法程序中指令(或语句)的条数C. 算法的有穷性是指算法必须能在执行有限个步骤之后终止 D. 以上三种描述都不对(2) 以下数据结构中不属于线性数据结构的是(C)A. 队列 B. 线性表 C. 二叉树 D. 栈(3) 在一棵...
求答案啊 - - 数据结构与算法习题
10.A B C D \/ - E * + 11.b 12.c 13.b 14.c 15.c(不确定)16d 17.c 18.c 19a 20b 21.c 22A B C D \/ + E * -(跟10差不多)23n 24y 25n 26y 27y 28(没看懂)29y 30n 31n ...
数据结构的问题~
1 计算机算法必须具备输入、输出、()等5个特性。 A 可行性、可移植性和可扩展性 B 可行性、确定性和有穷性 C 确定性、有穷性和稳定性 D 易读性、安全性和稳定性 2 在数据结构中,从逻辑上可以把数据结构分为( ) A 动态结构和静态结构 B 紧凑结构和非紧凑结构 C 内容结构和外部结构 D 线性结构和非线性...
那位大大能给提供一下浙大出版社出版陆汉权主编的《大学计算机基础教程...
1.计算机是一种能按照事先存储的程序,自动、高速地进行大量数值计算和各种信息处理的现代化智能电子装置。2.计算机的5个组成部分是:输入、存储、处理(运算)、控制和输出。输入用来将用户的程序和数据送入计算机;存储用来存放程序和数据;处理用来进行算术运算和逻辑运算,进行数据的处理;控制用来控制计算机各部件的工作;...
求2011年C语言公共基础知识
(1) 下面叙述正确的是(C)A. 算法的执行效率与数据的存储结构无关 B. 算法的空间复杂度是指算法程序中指令(或语句)的条数 C. 算法的有穷性是指算法必须能在执行有限个步骤之后终止 D. 以上三种描述都不对(2) 以下数据结构中不属于线性数据结构的是(C)A. 队列 B. 线性表 C. 二叉树 D. 栈(3) 在...