| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 359 人关注过本帖
标题:问个问题,希望高手帮忙
只看楼主 加入收藏
cxlttt
Rank: 1
等 级:新手上路
帖 子:16
专家分:7
注 册:2010-3-28
结帖率:66.67%
收藏
 问题点数:0 回复次数:1 
问个问题,希望高手帮忙
#include "stdio.h"
#define QueueSize 100 /*假定预分配的队列空间最多为100个元素*/  
typedef char DataType ; /*假定队列元素的数据类型为字符*/
typedef struct node{
DataType data;
struct node *next;
}QueueNode;
typedef struct{
QueueNode *front;  /*头指针*/
QueueNode *rear;
}LinkQueue;
/* 置队列空*/
void Initial(LinkQueue *Q)
/*将顺序队列置空*/
{    Q->front=Q->rear=NULL;
}
/*判队列空*/
int IsEmpty(LinkQueue *Q)
{
    return Q->front==NULL&&Q->rear==NULL;
}
/*进队列*/
void Push(LinkQueue *Q,DataType x)
{
/*将元素x插入链队列尾部*/
QueueNode *p=(QueueNode *)malloc(sizeof(QueueNode));/*申请新结点*/
p->data=x;
p->next=NULL;
    if(IsEmpty(Q))
  Q->front=Q->rear=p;  /*将x插入空队列*/
else
{ /*x插入非空队列的尾*/
  Q->rear->next=p;     /*p链到原队尾结点后*/
  Q->rear=p;           /*队尾指针指向新的尾*/
}
}
/*出队列*/
DataType Pop(LinkQueue *Q)
{
DataType x;
QueueNode *p;
if(IsEmpty(Q))
{
  printf("队列为空");/*下溢*/
  exit(1);
}
p=Q->front;                   /*指向对头结点*/
x=p->data;                    /*保存对头结点的数据*/
Q->front=p->next;             /*将对头结点从链上摘下*/
    if(Q->rear==p)/*原队中只有一个结点,删去后队列变空,此时队头指针已为空*/
  Q->rear=NULL;
free(p);   /*释放被删队头结点*/
return x;  /*返回原队头数据*/
}
/* 取队列顶元素*/
DataType Front(LinkQueue *Q)
{
if(IsEmpty(Q))
{
  printf("队列为空"); /*下溢,退出运行*/
  exit(1);
}
return Q->front->data;
}
void main()
{
LinkQueue s;
DataType first,sec;
Initial(&s);
Push(&s,'a');
Push(&s,'b');
first=Front(&s);
Pop(&s);
sec=Front(&s);
Pop(&s);
}
为什么一点要加红色字体的那一句啊,不加的话编译调试可以通过,但是一运行程序就死了,VC++和DEV C++ 都是如此……求高手指点
搜索更多相关主题的帖子: void next include return 元素 
2010-03-28 21:35
hziee
Rank: 4
等 级:业余侠客
帖 子:64
专家分:257
注 册:2010-3-12
收藏
得分:0 
未初始化的指针为野指针,虽然编译可以通过,但他指向一个未知的内存区域!
通过野指针来进行数据操作是很危险,比如就像你碰到情况。
2010-03-28 21:50
快速回复:问个问题,希望高手帮忙
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023936 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved