来一次网吧不容易小弟一次把问题问完啦呵呵
我在家自学数据结构 但遇到了些问题怎么想就想不通这是队列的入队操作
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;
struct node *next;
}NODE,*LQNODE;
void create(LQNODE *front,LQNODE *rear)
{
*front=(NODE *)malloc(sizeof(NODE));
(*front)->next=NULL;
*rear=*front; ( A )
}
void push(LQNODE *rear,int x)
{
NODE *p;
p=(NODE *)malloc(sizeof(NODE));
p->data=x;
p->next=NULL; (*rear)->next=p;
*rear=p;
}
void print(LQNODE *front)
{
NODE *p;
p=(*front)->next;
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
}
void main()
{
LQNODE front,rear;
int x=0,i;
create(&front,&rear);
printf("请输入5个元素:");
for(i=0;i<5;i++)
{
scanf("%d",&x);
push(&rear,x);
}
print(&front);
}
问题 1:我就想不明白为什么在 A处得代码 改为*front=*rear 程序就运行不成功呢
问题2:还有为什么队头指针front和队尾指针rear不能用NODE 定义呢?
我把他们改成用NODE 定义后的代码为:
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;
struct node *next;
}NODE;
void create(NODE *front,NODE *rear)
{
front=(NODE *)malloc(sizeof(NODE));
front->next=NULL;
rear=front;
}
void push(NODE *rear,int x)
{
NODE *p;
p=(NODE *)malloc(sizeof(NODE));
p->data=x;
p->next=NULL;
rear->next=p;
rear=p;
}
void print(NODE *front)
{
NODE *p;
p=front->next;
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
}
void main()
{
NODE *front,*rear;
rear=front=(NODE*)malloc(sizeof(NODE));
int x,i;
create(front,rear);
printf("请输入5个元素:");
for(i=0;i<5;i++)
{
scanf("%d",&x);
push(rear,x);
}
print(front);
}
问题3:但为什么运行的结果却是:
请输入5个元素:6 5 4 3 2
2Press any key to continu
问题4:还有个队列的出队问题请看以下代码
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;
struct node *next;
}NODE,*LQNODE;
void create(LQNODE *front,LQNODE *rear)
{
*front=(NODE *)malloc(sizeof(NODE));
(*front)->next=NULL;
*rear=*front;
}
void push(LQNODE *rear,int x)
{
NODE *p;
p=(NODE*)malloc(sizeof(NODE));
p->data=x;
p->next=NULL;
(*rear)->next=p;
*rear=p;
}
void out(LQNODE *front,LQNODE *rear,int x)
{
NODE *p;
if(*front!=*rear)
{
p=(*front)->next;
(*front)->next=p->next;/*注意出队方式若改成*front=p->next;free(p);则再次出队时将出错因为p=(*front)->next*/
if(p->next==NULL) /*注意出队一个元素后一定要判断队是否为空*/
*rear=*front;
x=p->data;
free(p);
}
void print(LQNODE *front)
{
NODE *p;
p=(*front)->next;
if(p!=NULL)
{
printf("output the linkqueue:");
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
}
else
{
printf("为空队列");
}
}
void main()
{
LQNODE front,rear;
int i,x,y;
create(&front,&rear);
print(&front);
printf("元素:");
for(i=0;i<5;i++)
{
scanf("%d",&x);
push(&rear,x);
}
print(&front);
out(&front,&rear,y);
printf("%d",y);
print(&front);
}
这个出队的代码提示出错:
:\Documents and Settings\Administrator\tyj.cpp(36) : error C2601: 'print' : local function definitions are illegal
C:\Documents and Settings\Administrator\tyj.cpp(54) : error C2601: 'main' : local function definitions are illegal
C:\Documents and Settings\Administrator\tyj.cpp(70) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.
tyj.exe - 1 error(s), 0 warning(s)