算法导论12:队列的链表实现 2016.1.12
2016-01-12 12:11
381 查看
普通的链表队列和栈的实现差不多,只是修改一下进出的规则即可。(感觉自己就像在翻译算法导论的伪代码一样。。不过还好吧,也有一点自己的理解)
下面是代码:
下面是代码:
#include<stdio.h> #include<stdlib.h> typedef struct _node{ int num; struct _node *next; }node; struct queue { node * head; node * tail; }Q; void build(struct queue &Q) { Q.tail=(node *)malloc(sizeof(node)); Q.tail->next=NULL; Q.head=(node *)malloc(sizeof(node)); Q.head->next=Q.tail; } int Qempty(struct queue &Q) { if ((Q.head)->next==Q.tail) return 1; else return 0; } int dequeue(struct queue &Q) { if (Qempty(Q)) { printf("空队列!\n"); } else { node *p; p=Q.head; Q.head=(Q.head)->next; int k=p->num; free(p); return k; } } void init(struct queue &Q) { while (!Qempty(Q)) { dequeue(Q); } } void enqueue(struct queue &Q,int n) { node *p; p=(node *)malloc(sizeof(node)); p->num=n; p->next=Q.head; Q.head=p; } void showqueue(struct queue Q) { while ((Q.head)->next!=Q.tail){ int k=(Q.head)->num; Q.head=(Q.head)->next; printf("|%d|\n",k); } printf("| |\n"); } int main() { printf("1:初始化队列;2:入队列;3:出队列;4:退出。\n"); build(Q); int n; while (1) { int k; scanf("%d",&k); switch(k) { case 1:init(Q); break; case 2:scanf("%d",&n); enqueue(Q,n); break; case 3:dequeue(Q); break; case 4:return 0; } showqueue(Q); } return 0; }
相关文章推荐
- 阿里云云服务器ECS Windows Server 2012 R2 64位标准版PHP环境搭建
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十)之Inner Classes
- leetcode219---Contains Duplicate II
- 规则
- 2016年01月12号
- ZYNQ HLS图像处理加速总结(二)——Processing System软件部分
- Android编程使用Intent传递对象的方法分析
- 待翻译---- Understanding Spring MVC Model and Session Attributes
- Activity生命周期
- Educational Codeforces Round 5-C. The Labyrinth(简单dfs)
- android 来电拦截
- 在POM文件中定义变量
- Android中的几种小窗口实现
- 图像分析之梯度L0范数平滑
- Android shell脚本的使用
- git相关
- 读写png
- Android实现QQ抢红包插件
- Android用ant打包时更新build.xml(Mac)
- 关于OSGI模块化编程中MENIFEST.MF文件中的Required Plug-ins和Imported Packages的区别