数据结构习题学习笔记(The Fifth Day)
来源:互联网 发布:多益网络客户端下载 编辑:程序博客网 时间:2024/05/16 09:09
Q1: 用单链表实现队列,并令 front=rear=NULL 表示队列为空,编写实现队列的如下五种运算的函数:
makenull:将队列置成空队列;
front:返回队列的第一个元素;
enqueue:把元素 x 插入到队列的后端;
dequeue:删除队列的第一个元素;
empty:判定队列是否为空。
MyView:道理简单,实现起来不容易.
注:使用LCC的IDE,好用并且方便.
CODE:
1,queue.h (队列头文件)
#include <stdio.h>
#include <stdlib.h>
typedef struct QNode...{
int data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct...{
QueuePtr front;//对头指针
QueuePtr rear;//队尾指针
}LinkQueue;//队列定义符号
/**//*构造队列*/
LinkQueue* makeQueue()...{
LinkQueue *Q = (LinkQueue *) malloc(sizeof(LinkQueue));
if(!Q)printf("Q:OVERFLOW ");//存储分配失败
else...{
Q->rear=NULL;
Q->front= NULL;
}
return Q;
}
//构造节点
QueuePtr makeNode(int i)...{
QueuePtr N = (QueuePtr)malloc(sizeof(QNode));
if(!N)printf("Node:OVERFLOW ");//存储分配失败
else...{
N->data=i;
N->next=NULL;
}
return N;
}
//判断队列是否为空
int isEmpty(LinkQueue *Q)...{
if(Q->front == NULL)
return 1;
else
return 0;
}
//将队列置空
void makeNull(LinkQueue *Q)...{
if(!isEmpty(Q))
printf("错误:队列为空!");
else...{
Q->rear=NULL;
Q->front= NULL;
}
}
//删除队列第一个元素
void deQueue(LinkQueue *Q)...{
if(isEmpty(Q))
printf("错误:队列为空! ");
else...{
QueuePtr p;
p = Q->front;
Q->front = p->next;
free(p);
}
}
/**//*返回队列的第一个元素*/
int front(LinkQueue *Q)
...{
int x;
if(!isEmpty(Q) && Q->front!=NULL)
x=(Q->front->data);
return x;
}
/**//*把元素x插入到队列右端*/
void enqueue(LinkQueue *Q,int e)
...{
QueuePtr p = makeNode(e);
if ( !isEmpty(Q)) //队列不为空,直接链接到队列尾部
...{
Q->rear->next = p;
Q->rear = p;
}
else
...{ //队列为空
Q->front = p;
Q->rear = p;
}
}
/**//*打印链表*/
void print(LinkQueue *Q)...{
if(!isEmpty(Q))...{//判断队列是否为空
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if(!p)printf("Node:OVERFLOW ");//存储分配失败
else...{
printf("队列为:");
p=Q->front;
do
...{
printf("%d",p->data);
if((p->next)!=NULL)...{
p=p->next;
}
else break;
printf(",");
}while(1);
printf(" ");
}
}
else
printf("错误:检测到队列为空,无法打印! ");
}
#include <stdlib.h>
typedef struct QNode...{
int data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct...{
QueuePtr front;//对头指针
QueuePtr rear;//队尾指针
}LinkQueue;//队列定义符号
/**//*构造队列*/
LinkQueue* makeQueue()...{
LinkQueue *Q = (LinkQueue *) malloc(sizeof(LinkQueue));
if(!Q)printf("Q:OVERFLOW ");//存储分配失败
else...{
Q->rear=NULL;
Q->front= NULL;
}
return Q;
}
//构造节点
QueuePtr makeNode(int i)...{
QueuePtr N = (QueuePtr)malloc(sizeof(QNode));
if(!N)printf("Node:OVERFLOW ");//存储分配失败
else...{
N->data=i;
N->next=NULL;
}
return N;
}
//判断队列是否为空
int isEmpty(LinkQueue *Q)...{
if(Q->front == NULL)
return 1;
else
return 0;
}
//将队列置空
void makeNull(LinkQueue *Q)...{
if(!isEmpty(Q))
printf("错误:队列为空!");
else...{
Q->rear=NULL;
Q->front= NULL;
}
}
//删除队列第一个元素
void deQueue(LinkQueue *Q)...{
if(isEmpty(Q))
printf("错误:队列为空! ");
else...{
QueuePtr p;
p = Q->front;
Q->front = p->next;
free(p);
}
}
/**//*返回队列的第一个元素*/
int front(LinkQueue *Q)
...{
int x;
if(!isEmpty(Q) && Q->front!=NULL)
x=(Q->front->data);
return x;
}
/**//*把元素x插入到队列右端*/
void enqueue(LinkQueue *Q,int e)
...{
QueuePtr p = makeNode(e);
if ( !isEmpty(Q)) //队列不为空,直接链接到队列尾部
...{
Q->rear->next = p;
Q->rear = p;
}
else
...{ //队列为空
Q->front = p;
Q->rear = p;
}
}
/**//*打印链表*/
void print(LinkQueue *Q)...{
if(!isEmpty(Q))...{//判断队列是否为空
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if(!p)printf("Node:OVERFLOW ");//存储分配失败
else...{
printf("队列为:");
p=Q->front;
do
...{
printf("%d",p->data);
if((p->next)!=NULL)...{
p=p->next;
}
else break;
printf(",");
}while(1);
printf(" ");
}
}
else
printf("错误:检测到队列为空,无法打印! ");
}
2,测试代码
#include <stdio.h>
#include "queue.h"
void main()
...{
LinkQueue *Queue = makeQueue();
print(Queue);
enqueue(Queue,3);
enqueue(Queue,4);
enqueue(Queue,5);
enqueue(Queue,6);
print(Queue);
deQueue(Queue);
print(Queue);
}
#include "queue.h"
void main()
...{
LinkQueue *Queue = makeQueue();
print(Queue);
enqueue(Queue,3);
enqueue(Queue,4);
enqueue(Queue,5);
enqueue(Queue,6);
print(Queue);
deQueue(Queue);
print(Queue);
}
RUN:
Good Luck……
- 数据结构习题学习笔记(The Fifth Day)
- 数据结构习题学习笔记(The First Day)
- 数据结构习题学习笔记(The Second Day)
- 数据结构习题学习笔记(The Third Day)
- 数据结构习题学习笔记(The Fourth Day)
- 数据结构习题学习笔记(The Sixth Day)
- The fifth day
- 《黑马程序员》The fifth day
- 数据结构学习笔记 Day 7
- 数据结构学习笔记 --- 树(习题)
- 数据结构学习笔记 --- 树(习题)
- Starting From 0 Learning Python(The Fifth Day)
- Programming Windows, Fifth Edtion学习笔记(一)
- Programming Windows, Fifth Edtion学习笔记(2.2)
- OpenGL SUPERBIBLE Fifth Edition 学习笔记1
- 数据结构学习笔记 --- 栈、队列 (习题)
- 数据结构学习笔记8 树 课后习题
- 数据结构学习笔记 --- 栈、队列 (习题)
- 郎咸平福州演讲:卖地的GDP将使大陆经济崩溃
- 串口定义参数详解
- Java构造函数的继承问题
- 一个仓库系统的经历,献给所有的IT人.....
- Style Report--Web报表工具首选
- 数据结构习题学习笔记(The Fifth Day)
- c#中的引用问题1
- c#中的引用问题2
- c语言中产生随机数
- 程序员接项目的四点技巧
- 【原创】GridView实现多表头
- 朋友站点
- 李嘉诚:性格才是命运的决定因素
- MD5算法学习及其对用户密码加密的应用