单链表实现队列

#include <stdio.h>
#include <stdlib.h>

typedef int queue_element_t;

typedef struct queue_node_s
{
    queue_element_t element;
    struct queue_node_s *restp;
}queue_node_t;

/*Queue front & rear pointer*/
typedef struct
{
    queue_node_t *frontp,
             *rearp;
    int size;
}queue_t;

void add_to_q(queue_t *qp, queue_element_t ele)
{
    /*Keep queue front pointer*/
    if(qp->size == 0)
    {
        qp->rearp = (queue_node_t*)malloc(sizeof(queue_node_t));
        qp->frontp = qp->rearp;
    }
    /*Renew queue rear pointer*/
    else
    {
        qp->rearp->restp = (queue_node_t*)malloc(sizeof(queue_node_t));
        qp->rearp = qp->rearp->restp;
    }

    qp->rearp->element = ele;
    qp->rearp->restp = NULL;
    ++(qp->size);
}

queue_element_t remove_from_q(queue_t *qp)
{
    queue_node_t *to_freep;
    queue_element_t ans;

    to_freep = qp->frontp;
    ans = to_freep->element;
    qp->frontp = to_freep->restp;
    free(to_freep);
    --(qp->size);

    if(qp->size == 0)
        qp->rearp = NULL;

    return ans;
}

int main(void)
{
    queue_t queue = {NULL, NULL, 0};

    add_to_q(&queue, 100);
    add_to_q(&queue, 200);
    add_to_q(&queue, 300);
    add_to_q(&queue, 400);

    int i;
    int sum = queue.size;

    for(i = 0; i < sum; i++)
        printf("%d\n", remove_from_q(&queue));
}
时间: 2024-10-11 19:53:46

单链表实现队列的相关文章

使用带有头尾节点的单链表实现队列

package db; public class Queue<E> { /** * 内部类--单链表 * @author fightzhao * * @param <E> */ private static class Node<E> { public Node<E> next; public E data; public Node(E data, Node<E> next) { this.data = data; this.next = nex

Python 使用单链表实现队列 (基于class, 包含迭代器)

#!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2015-2-3 @author: beyondzhou @name: test_linklistqueue.py ''' def test_linklistqueue(): # import pyListQueue from myqueue import linkListQueue print '#Init a queue named smith using enqueue' sm

数据结构 队列(带尾节点的单链表实现) 回顾练习

带尾节点的单链表队列 入队0(1) 出队0(1) 1 #!/usr/bin/env python3 2 3 class QueueUnderflow(ValueError): 4 pass 5 6 class Node(object): 7 def __init__(self, elem, next_=None): 8 self.elem = elem 9 self.next = next_ 10 11 #queue_list 12 class LQueue(object): 13 def __

十一、实现队列的方法二(单链表的复用)

通过对单链表代码的复用,实现队列 一.LinkList.h #ifndef _LINKLIST_H_ #define _LINKLIST_H_ typedef void LinkList; typedef struct _tag_LinkListNode LinkListNode; struct _tag_LinkListNode { LinkListNode* next; }; LinkList* LinkList_Create(); void LinkList_Destroy(LinkLis

栈,队列,单链表,双向链表

1. 定义头文件 实现栈方法的定义,注意这里用到了全局的静态数组,可以通过这种方式保护数据. main.c,实现存储 队列,创建头文件queue.h 创建queue.c 实现main函数 单链表 在定义头文件的时候,最好使用: #ifndef 变量A #define变量A 函数声明和结构声明等声明 #endif 通过上面的这种方式可以避免重复调用头文件时候产生的负面影响. 定义头文件link.h:(注意加上extern) 定义link.c 编写main.c 4.双向链表 创建link.h头文件

栈、队列、单链表

栈: <span style="color:#000000;">#define MAX_SIZE 100//队列的最大长度 //-------------------------栈----------------------- int top=0;//栈顶变量 void add(char st[],char intput){ //入栈函数 st[top]=intput; top++; } void pop(char st[]){ //出栈函数 top--; st[top]=

C++实现单链表和子类栈(Stack)及单向队列(Queue)

刚刚开始学习c++.之前c的内容掌握的也不多,基本只是一本概论课的程度,以前使用c的struct写过的链表.用python写过简单的数据结构,就试着把两者用c++写出来,也是对c++的class,以及继承中的public/protected/private的性质进行初步了解.第一次写头文件.h和源文件.cpp分开的c++代码.过程中参考了ProLyn和kgvito的代码,基本就是百度"单链表 c++"的前几个搜索结果. 节点listNode还是用struct来写了,因为我想节点除了构造

数据结构 线性结构(数组[列表] ,链表 单链表的增删改查**, 线性结构的应用 队列 栈[函数的调用**]),非线性结构 树

数据结构 参考:http://lupython.gitee.io/ 线性结构 就是能够用一根线串起来的数据结构 数组 (列表) 问:申请数组的前提条件是啥? a[12]?内存需要满足的条件? 答:内存必须有一块连续的内存空间 int a[7] : 声明一个数组,这个数组的数组名是 a, 数组的大小是 7, 数组元素的类型是整型. int a[7] = array(1,2,3,4,5,6,7) 问:如何申请内存? 答:C,C++语言,申请:mallco (28).释放:free(28) 问:int

栈和队列----删除无序单链表中值重复出现的节点

删除无序单链表中值重复出现的节点 给定一个无序单链表的头节点head,删除其中值重复的节点 例如: 1->2->3->3->4->4->2->1->1->null 删除之后变为 1->2->3->4->null 方法1:如果链表长度为N,时间复杂度达到O(N) 方法2:如果要求空间复杂度为O(1),应该怎样实现 [解析] 方法1:利用哈希表去实现 使用哈希表,因为头节点是不用删除的节点,所以首先将头节点放入到哈希表中,然后从下一