#include <stdio.h>
#include <stdlib.h> typedef int QElemType; typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode; typedef struct{
QNode *front;
QNode *rear;
}LinkQueue; LinkQueue *InitQueue(LinkQueue *Q); //初始化
LinkQueue *DestroyQueue(LinkQueue* Q);//销毁
void ClearQueue(LinkQueue *Q);//清空
int QueueEmpty(LinkQueue *Q);//判空
int QueueLength(LinkQueue *Q);//队列长度
QElemType GetHead(LinkQueue *Q);//获取队头元素
int EnQueue(LinkQueue *Q, QElemType e);//插入新元素到队尾
int DeQueue(LinkQueue *Q, QElemType *e);//删除队头元素
void QueueTraverse(LinkQueue *Q);//遍历 //初始化
LinkQueue *InitQueue(LinkQueue *Q){
Q = (LinkQueue *)malloc(sizeof(LinkQueue));
//共同指向头节点
Q->front = Q->rear = (QNode *)malloc(sizeof(QNode));
Q->front->next = NULL;
printf("初始化成功\n");
return Q;
} //销毁,返回一个空指针
LinkQueue *DestroyQueue(LinkQueue* Q){
QNode *p = Q->front->next;
QNode *r = p->next;
while(r){
free(p);
p = r;
r = p->next;
}
free(Q->front);
free(Q);
printf("销毁成功\n");
return NULL;
} //清空
void ClearQueue(LinkQueue *Q){
QNode *p = Q->front->next;
while(p){
p->data = ;
p = p->next;
}
printf("清空成功\n");
} //判空
int QueueEmpty(LinkQueue *Q){
return Q->rear==Q->front;
} //队列长度
int QueueLength(LinkQueue *Q){
int len = ;
QNode *p = Q->front->next;
while(p){
len++;
p = p->next;
}
return len;
} //获取队头元素
QElemType GetHead(LinkQueue *Q){
if(Q->front != Q->rear){
printf("队头元素是%d\n", Q->front->next->data);
return Q->front->next->data;
}else{
printf("空链队,无头元素\n");
return NULL;
}
} //插入新元素到队尾
int EnQueue(LinkQueue *Q, QElemType e){
QNode *p = (QNode *)malloc(sizeof(QNode));
p ->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
printf("元素%d插入成功\n", e);
return ;
} //删除队头元素
int DeQueue(LinkQueue *Q, QElemType *e){
if(Q->front == Q->rear){
printf("空链队,删除失败\n");
return ;
}
QNode *p = Q->front->next;
*e = p->data;
printf("%d元素出链队\n", *e);
Q->front->next = p->next;
//最后一个元素被删除,队尾指针指向头节点
if(Q->rear == p) Q->rear=Q->front;
free(p);
return ;
} //遍历
void QueueTraverse(LinkQueue *Q){
if(Q->front == Q->rear){
printf("空链队\n");
return;
}
QNode *p = Q->front->next;
while(p){
printf("%d ", p->data);
p = p->next;
}
printf("\n");
} int main()
{
LinkQueue *Q = NULL;
QElemType e = NULL; //初始化测试
Q = InitQueue(Q); // //判空测试
// if(QueueEmpty(Q)){
// printf("空链栈\n");
// }
// EnQueue(Q, 1);
// if(QueueEmpty(Q)){
// printf("空链栈\n");
// }
// DeQueue(Q, &e);
// if(QueueEmpty(Q)){
// printf("空链栈\n");
// } // //长度测试
// printf("链队长度为%d\n", QueueLength(Q));
// EnQueue(Q, 1);
// EnQueue(Q, 2);
// printf("链队长度为%d\n", QueueLength(Q));
// DeQueue(Q, &e);
// DeQueue(Q, &e);
// printf("链队长度为%d\n", QueueLength(Q)); // //遍历测试
// QueueTraverse(Q); // //获取头元素测试
// e = GetHead(Q);
// EnQueue(Q, 1);
// EnQueue(Q, 2);
// e = GetHead(Q);
// DeQueue(Q, &e);
// e = GetHead(Q); // //入队测试
// EnQueue(Q, 1);
// EnQueue(Q, 2);
// EnQueue(Q, 3);
// EnQueue(Q, 4);
// EnQueue(Q, 5);
// EnQueue(Q, 6);
// EnQueue(Q, 7);
// QueueTraverse(Q); // //出队测试
// EnQueue(Q, 1);
// EnQueue(Q, 2);
// EnQueue(Q, 3);
// EnQueue(Q, 4);
// QueueTraverse(Q);
// DeQueue(Q, &e);
// printf("测试e是否改变:%d\n",e);
// DeQueue(Q, &e);
// printf("测试e是否改变:%d\n",e);
// QueueTraverse(Q); // //清空测试
// EnQueue(Q, 1);
// EnQueue(Q, 2);
// ClearQueue(Q);
// QueueTraverse(Q); //销毁测试
EnQueue(Q, );
EnQueue(Q, );
Q = DestroyQueue(Q);
QueueTraverse(Q);
}

纯C语言实现链队的更多相关文章

  1. 纯C语言实现链栈

    #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct StackNode{ E ...

  2. C语言实现链式队列

    链式队列,简称"链队列",即使用链表实现的队列存储结构. 链式队列的实现思想同顺序队列类似,只需创建两个指针(命名为 top 和 rear)分别指向链表中队列的队头元素和队尾元素, ...

  3. 纯C语言INI文件解析

    原地址:http://blog.csdn.net/foruok/article/details/17715969 在一个跨平台( Android .Windows.Linux )项目中配置文件用 IN ...

  4. 经典数独游戏+数独求解器—纯C语言实现

    "心常乐数独小游戏"(下面简称"本软件")是一款windows平台下的数独游戏软件. 本软件是开源.免费软件. 本软件使用纯C语言编写,MinGW编译,NSIS ...

  5. 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧拿出来拍啊

    花10天时间用C语言做了个小站 http://tieba.yunxunmi.com/index.html 简称: 云贴吧 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧 ...

  6. Javascript、C#、php、asp、python 等语言的链式操作的实现

    一.什么是链式操作 把需要的下一步操作的对象通过上一步操作返回回来.使完成某些功能具有持续性. 二.链式操作优点 代码更精简优雅.链式操作能大大精简代码量,多项操作一行代码一气呵成,搞定: 链式操作应 ...

  7. C++实现链队类——合肥工业大学数据结构实验5:链式队列

    实验5 5.1 实验目的 熟练掌握队列的顺序链式存储结构. 熟练掌握队列的有关算法设计,并在链队列上实现. 根据具体给定的需求,合理设计并实现相关结构和算法. 5.2 实验要求 5.2.1链队列实验要 ...

  8. geek青年的状态机,查表,纯C语言实现

    geek青年的状态机,查表,纯C语言实现 1. 问题的提出.抽象 建一,不止是他,不少人跟我讨论过这种问题:怎样才干保证在需求变更.扩充的情况下.程序的主体部分不动呢? 这是一个很深刻和艰难的问题.在 ...

  9. FastDFS是纯C语言实现,只支持Linux,适合以中小文件为载体的在线服务,还可以冗余备份和负载均衡

    一.理论基础 FastDFS比较适合以中小文件为载体的在线服务,比如跟NGINX(APACHE)配合搭建图片服务器. 分布式文件系统FastDFS FastDFS是纯C语言实现,只支持Linux.Fr ...

随机推荐

  1. Android Activity 开发常用技巧整理

    1.设置 Activity 背景色为透明 在style.xml里面声明: <style name="TranslucentActivityStyle" parent=&quo ...

  2. [20190920]完善vim调用sqlplus脚本.txt

    [20190920]完善vim调用sqlplus脚本.txt --//以前写的http://blog.itpub.net/267265/viewspace-2140936/=>[20170617 ...

  3. mysql使用命令

    1.创建用户 create user 'name'@'host' identified by 'psssword'; 2.授权 grant select, updata,insert (all) on ...

  4. CentOS7 安装Jenkins

    准备工作 首选需要安装JAVA环境  https://www.cnblogs.com/stulzq/p/9286878.html 如果你的系统没有自带git,那么也需要安装一个 yum install ...

  5. 4.Java基础_Java类型转换

    import javax.swing.plaf.synth.SynthMenuBarUI; /* 类型转换 自动类型转换: 把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量 强制类型 ...

  6. 【洛谷P4251】[SCOI2015]小凸玩矩阵(二分+二分图匹配)

    洛谷 题意: 给出一个\(n*m\)的矩阵\(A\).现要从中选出\(n\)个数,任意两个数不能在同一行或者同一列. 现在问选出的\(n\)个数中第\(k\)大的数的最小值是多少. 思路: 显然二分一 ...

  7. ARM的堆栈方式

    当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack): 当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack): 根据对战的生成方式分为:递增堆栈(Asce ...

  8. GitHub 注册失败的原因 以及解决 。

    1.注册的时候老是卡在第一步: 提交用户名和密码 还有邮箱的时候 提交成功后. 不跳出 第二步.若现在去登录账号和密码,不管输对的还是输错的都是显示错误的.2.查看GitHub官网帮助后,不难发现问题 ...

  9. LeetCode236. 二叉树的最近公共祖先

    * @lc app=leetcode.cn id=236 lang=cpp  *  * [236] 二叉树的最近公共祖先  *  * https://leetcode-cn.com/problems/ ...

  10. CF1278C-Berry Jam-(前缀和)

    https://vjudge.net/problem/CodeForces-1278C 题意:有2n瓶果酱,中间有一个楼梯隔开,从中间往左或右两边清空果酱,使得两种果酱的数量相等,最少要清空多少瓶 思 ...