链队列

链队列就是简化了的单链表

nodequeue.h

#ifndef __NODEQUEUE__
#define __NODEQUEUE__ #include <stdio.h>
#include <malloc.h>
#include <assert.h>
#include <memory.h>
#include <stdbool.h> #define ElemType int typedef struct Node{
ElemType data;
struct Node* next;
}Node; typedef struct NodeQueue{
Node* front;
Node* tail;
size_t size;
}NodeQueue; void init(NodeQueue*);
void enQueue(NodeQueue*, ElemType);
void deQueue(NodeQueue*);
void show_list(NodeQueue*);
int length(NodeQueue*);
void clear(NodeQueue*);
void destroy(NodeQueue*); #endif

nodequeue.c

#include "nodequeue.h"

void init(NodeQueue* queue){
queue->front = queue->tail = (Node*)malloc(sizeof(Node));
queue->tail->next = NULL;
queue->size = 0;
}
//入队(尾插)
void enQueue(NodeQueue* queue, ElemType val){
Node* p = (Node*)malloc(sizeof(Node));
p->data = val;
if(queue->front->next == NULL){
queue->front->next = p;
}
else{
queue->tail->next = p;
}
queue->tail = p;
p->next = NULL;
queue->size++;
}
//出队(头删)
void deQueue(NodeQueue* queue){
if(queue->size == 0)return;
Node* tmp = queue->front->next;
queue->front->next = queue->front->next->next;
free(tmp);
queue->size--;
}
int length(NodeQueue* queue){
return queue->size;
}
void show_list(NodeQueue* queue){
Node* p = queue->front;
while(p->next != NULL){
printf("%d\n", p->next->data);
p = p->next;
}
}
void clear(NodeQueue* queue){
if(queue->size == 0)return;
Node* p = queue->front;
Node* tmp;
while(p->next != NULL){
tmp = p->next;
p = p->next;
free(tmp);
}
queue->tail = queue->front;
queue->tail->next = NULL;
queue->size = 0;
}
void destroy(NodeQueue* queue){
clear(queue);
free(queue->front);
}

nodequeuemain.c

include "nodequeue.h"

int main(){
NodeQueue list;
init(&list);
int select = 1;
ElemType item;
int index;
while(select){
printf("*****************************************\n");
printf("*** [1] push [2] pop ***\n");
printf("*** [3] show_list [4] length ***\n");
printf("*** [5] clear [6] destroy ***\n");
printf("*** [0] quit ***\n");
printf("*****************************************\n");
printf("请选择:>");
scanf("%d", &select);
if(0 == select)
break;
switch(select){
case 1:
printf("请输入要插入的数据>\n");
scanf("%d",&item);
enQueue(&list, item);
show_list(&list);
break;
case 2:
deQueue(&list);
show_list(&list);
break;
case 3:
show_list(&list);
break;
case 4:
printf("length is %d\n", length(&list));
break;
case 5:
clear(&list);
show_list(&list);
break;
case 6:
destroy(&list);
break;
default:
printf("输入的选择错误,请重新选择\n");
break;
}
}
destroy(&list);
}

c/c++链队列的更多相关文章

  1. javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例

    1 队列的基本概念 队列(Queue):也是运算受限的线性表.是一种先进先出(First In First Out ,简称FIFO)的线性表.只允许在表的一端进行插入,而在另一端进行删除. 队首(fr ...

  2. java与数据结构(8)---java实现链队列

    链队列 实际上就是单链表,只是规定了删除在队头进行,添加在队尾进行. 链队列代码结构 package list.queue; public interface Queuable<T>; p ...

  3. 链队列之C++实现

    链队列时建立在单链表的基础之上的.由于是动态分配节点内存,所以无需判满. 链队列的形式如下: 1.队列空 2.队列存在数据 下面介绍下C++实现的链队列,VC6下调试通过. 1.文件组织 2.lq.h ...

  4. C语言实现链队列的初始化&进队&出队

    /*链表实现队列的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typed ...

  5. 【Java】 大话数据结构(7) 循环队列和链队列

    本文根据<大话数据结构>一书,实现了Java版的循环队列.链队列. 队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 1.循环队列 队列的顺序储存结构:用数组存储队列,引入 ...

  6. 队列的理解和实现(二) ----- 链队列(java实现)

    什么是链队列 链队是指采用链式存储结构实现的队列,通常链队用单链表俩表示.一个链队显然需要两个分别指示队头和队尾的指针,也称为头指针和尾指针,有了这两个指针才能唯一的确定. package 链队列; ...

  7. C语言——循环队列和链队列的基本运算

    // 循环队列#include <stdio.h> #include "SeqQue.h" // 循环队列的基本运算 /* const int maxsize = 20 ...

  8. C语言链队列

    链队列类似于单链表,为了限制只能从两端操作数据,其结构体内有2个指针分别指向头尾,但队列里的节点用另一种结构体来表示,头尾指针则为指向该结构体的类型.只能通过操作头尾指针来操作队列. typedef ...

  9. java实现链队列

    java实现链队列的类代码: package linkqueue; public class LinkQueue { class Element { Object elem; Element next ...

随机推荐

  1. Ubuntu16.04配置静态IP地址

    ubuntu如何设置静态IP? 设置静态IP 1.编辑/etc/network/interfaces文件: # This file describes the network interfaces a ...

  2. MySQL高可用之组复制(4):详细分析组复制理论

    MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...

  3. Perl的输出:print、say和printf、sprintf

    print.printf和say都可以输出信息.print和say类似,print不自带换行符,say自带换行符,但要使用say,必须写use语句use 5.010;,printf像C语言的print ...

  4. Flask入门第二天

    一.请求钩子 在客户端和服务器交互的过程中,有些准备工作或稍微工作是需要处理的,比如:在请求开始时,建立数据库连接:在请求开始时,根据需求进行权限校验:在请求结束时,指定数据的交互格式等.为了让每个视 ...

  5. javascript小实例,在页面中输出当前客户端时间

    时间对象(Date())比较简单,本文旨在为初学者入门使用,大牛可略过! 本文承接基础知识实例,说一下实例的要求: 在页面中输出当前客户端时间(2015年1月1日星期一10:10:10这样的格式),每 ...

  6. js如何获取url参数

    匹配URL参数的正则是: var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", ...

  7. [android] 显示意图激活另外一个activity

    可以使用跳转的方式类似javaweb来实现界面转换 显示意图就是必须要指定开启组件的具体信息,包名,组件名,组件的class 新建一个类TwoActivity ,继承Activity类,重写onCre ...

  8. 详解MySQL基准测试和sysbench工具(转)

    前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处, ...

  9. Hibernate入门(十)inverse

    双向关联产生多余的SQL语句 /** * 添加一个订单到id为6的客户中 */ @Test public void fun1(){ Session session = HibernateUtils.g ...

  10. ApplicationListener详解

    ApplicationListener详解 ApplicationListener可以监听某个事件event 通过实现这个接口,传入一个泛型事件,在run方法中就可以监听这个事件,从而做出一定的逻辑 ...