- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章队列的基本操作
队列的基本操作:构造空队列、判断队列是否为空、插入新的队尾元素、返回队头指针、删除队头元素、测量队列的长度、输出、置空、销毁。
明确:先进先出。
程序代码:
#includestdio.h
#includestdlib.h
#define OVERFLOW -2
#define OK 1
typedef int QElemType; //单链队列
typedef int Status;
typedef struct QNode //结点结构
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct //链队结构
{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
//函数声明
Status InitQueue(LinkQueue Q);
void QueueEmpty(LinkQueue Q);
Status EnQueue(LinkQueue Q,QElemType e);
int QueueLength(LinkQueue Q);
Status visit(QElemType e);
Status QueueTraverse(LinkQueue Q,Status (*visit)(QElemType));
Status GetHead(LinkQueue Q,QElemType e);
Status DeQueue(LinkQueue Q,QElemType e);
Status DestroyQueue(LinkQueue Q);
void ClearQueue(LinkQueue Q);
//主函数
void main()
{
int i,n;
QElemType e,e1,e2,e3;
LinkQueue Q;
InitQueue(Q);
QueueEmpty(Q);
printf(请输入所要构造的队列中的元素个数:\n);
scanf(%d,n);
printf(请输入队列中具体的元素:\n);
for(i=0;in;i++)
{
scanf(%d,e);
EnQueue(Q,e);
}
QueueLength(Q);
printf(队列中的元素依次为:\n);
QueueTraverse(Q,visit);
printf(初始时,队列的队头元素为:%d\n,GetHead(Q,e1));
DeQueue(Q,e2);
printf(删除后,队列的队头元素为:%d\n,GetHead(Q,e3));
ClearQueue(Q);
printf(清空队列后,Q.front=%u Q.rear=%u Q.front-next=%u\n,Q.front,Q.rear,Q.front-next);
DestroyQueue(Q);
printf(销毁队列后,Q.front=%u Q.rear=%u\n,Q.front,Q.rear);
}
//构造一个空队列Q
Status InitQueue(LinkQueue Q)
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front) //存储分配失败
exit (OVERFLOW);
Q.front-next=NULL;
printf(构造一个空队列成功!\n);
return OK;
}
//判断队列是否为空
void QueueEmpty(LinkQueue Q)
{
if(Q.front-next==NULL)
printf(TRUE!\n);
else
printf(FALSE!\n);
}
//插入元素e为Q的新的队尾元素
Status EnQueue(LinkQueue Q,QElemType e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) //存储分配失败
exit(OVERFLOW);
p-data=e;
p-next=NULL;
Q.rear-next=p;
Q.rear=p;
return OK;
}
//返回Q的元素个数,即为队列的长度 特别注意:与栈不同
int QueueLength(LinkQueue Q)
{
int i=0;
QueuePtr p;
p=Q.front;
while(Q.rear!=p)
{
i++;
p=p-next;
}
printf(现在的栈的长度为:%d\n,
文档评论(0)