算法学习之旅,初级篇(20)--队列的实现
来源:互联网 发布:数据库学了用来干什么 编辑:程序博客网 时间:2024/06/05 15:03
介绍
使用c语言实现队列。
分析
队列功能有初始化,入队,出对,判断是否为空,队列长度,队头队尾元素获得。
代码
#include<stdio.h>
#include<stdlib.h>
typedef int QElemType;
#define OK 1
#define ERROR 0
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
int size;
}LinkQueue;
//初始化
int InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
exit(-1);
Q.front->next=NULL;
Q.size=0;
return OK;
}
//把元素e入队
int EnQueue(LinkQueue &Q,QElemType &e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(0);
p->next=NULL;
p->data=e;
Q.rear->next=p;
Q.rear=p;
Q.size++;
return OK;
}
//队头元素出队
int Dequeue(LinkQueue &Q)
{
if(Q.front==Q.rear)
return ERROR;
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
p=Q.front->next;
Q.front->next=p->next;
Q.size--;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return OK;
}
//判断队列是否为空
int IsEmpty(LinkQueue &p)
{
if(p.front==NULL&&p.rear==NULL&&p.size==0)
return 1;
else
return 0;
}
//返回队列大小
int GetSize(LinkQueue &p)
{
return p.size;
}
//返回队头元素
QElemType GetFront(LinkQueue &p)
{
if(IsEmpty(p)!=1)
{
int a=p.front->data;
return p.front->next->data;
}
else
return -1;
}
//返回队尾元素
QElemType GeRear(LinkQueue &p)
{
if(IsEmpty(p)!=1)
{
return p.rear->next->data;
}
else
return -1;
}
int main()
{
LinkQueue link;
InitQueue(link);
for(int i=0;i<10;i++)
EnQueue(link,i);
printf("%d\n",GetSize(link));
for(int i=0;i<10;i++)
{
printf("%d ",GetSize(link));
printf("%d\n",GetFront(link));
Dequeue(link);
}
system("pause");
return 0;
}
#include<stdlib.h>
typedef int QElemType;
#define OK 1
#define ERROR 0
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
int size;
}LinkQueue;
//初始化
int InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
exit(-1);
Q.front->next=NULL;
Q.size=0;
return OK;
}
//把元素e入队
int EnQueue(LinkQueue &Q,QElemType &e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(0);
p->next=NULL;
p->data=e;
Q.rear->next=p;
Q.rear=p;
Q.size++;
return OK;
}
//队头元素出队
int Dequeue(LinkQueue &Q)
{
if(Q.front==Q.rear)
return ERROR;
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
p=Q.front->next;
Q.front->next=p->next;
Q.size--;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return OK;
}
//判断队列是否为空
int IsEmpty(LinkQueue &p)
{
if(p.front==NULL&&p.rear==NULL&&p.size==0)
return 1;
else
return 0;
}
//返回队列大小
int GetSize(LinkQueue &p)
{
return p.size;
}
//返回队头元素
QElemType GetFront(LinkQueue &p)
{
if(IsEmpty(p)!=1)
{
int a=p.front->data;
return p.front->next->data;
}
else
return -1;
}
//返回队尾元素
QElemType GeRear(LinkQueue &p)
{
if(IsEmpty(p)!=1)
{
return p.rear->next->data;
}
else
return -1;
}
int main()
{
LinkQueue link;
InitQueue(link);
for(int i=0;i<10;i++)
EnQueue(link,i);
printf("%d\n",GetSize(link));
for(int i=0;i<10;i++)
{
printf("%d ",GetSize(link));
printf("%d\n",GetFront(link));
Dequeue(link);
}
system("pause");
return 0;
}
遇到的问题
头尾节点的里面的data是没有数据的。
阅读全文
0 0
- 算法学习之旅,初级篇(20)--队列的实现
- 算法学习之旅,初级篇(22)--循环队列
- 算法学习之旅,初级篇(21)--栈的实现
- 算法学习之旅,初级篇(1)--大小写转换
- 算法学习之旅,初级篇(2)--水仙花数
- 算法学习之旅,初级篇(4)--哈密尔顿距离
- 算法学习之旅,初级篇(5)--数码平方和
- 算法学习之旅,初级篇(6)--统计字符
- 算法学习之旅,初级篇(7)--数字塔
- 算法学习之旅,初级篇(9)--字符串逆序
- 算法学习之旅,初级篇(10)--回文字符串
- 算法学习之旅,初级篇(12)--最小公倍数
- 算法学习之旅,初级篇(13)--素数判定
- 算法学习之旅,初级篇(15)--分数加减法
- 算法学习之旅,初级篇(17)--质因数分解
- 算法学习之旅,初级篇(18)--哥德巴赫猜想
- 算法学习之旅,初级篇(19)--替换空格
- 算法学习之旅,初级篇(11)--凯撒的密码
- PHP 如果获取接口的值和response headers内容
- 初学spring Boot 启动异常BeanDefinitionStoreException
- LCD驱动--测试
- 源码剖析MapReduce作业提交机制(集群模式)
- c++实现Matlab矩阵Matrix类(实矩阵Matrix、复矩阵CMatrix)
- 算法学习之旅,初级篇(20)--队列的实现
- Android之jni编译报错comparsion between signed and unsigned integer expressions解决办法
- Linux关机和重启命令
- HDU 6121 Build a tree(找规律+implement)
- PHP基础1-数据类型
- linux中的http服务浅谈(3)
- yarn SLS公平调度器测试
- Windows 编译libevent库
- 如何在局域网中将Ubuntu文件夹共享给Windows