队列的链式存储及简单操作

#include<cstdio>
#include<cstdlib>
#include<cstring>

typedef struct Qnode{
    int data;
    struct Qnode *next;
}Qnode,*QueuePtr;
typedef struct{
    QueuePtr front,rear;
}LinkQueue;
void Init(LinkQueue *Q){
    Q->front = (QueuePtr)malloc(sizeof(Qnode));
    Q->rear = Q->front;
}
int EnQueue(LinkQueue *Q,int e){
    QueuePtr s = (QueuePtr)malloc(sizeof(Qnode));
    if(!s) exit(0);
    s->data = e;
    s->next = NULL;
    Q->rear->next = s;
    Q->rear = s;
    printf("已将 %d 入队!\n",e);
    return 1;
}
int DeQueue(LinkQueue *Q,int *e){
    QueuePtr p;
    if(Q->front == Q->rear) return 0;
    p = Q->front->next;
    *e = p->data;
    Q->front->next = p->next;
    if(Q->rear == p) Q->rear = Q->front;
    free(p);
    return 1;
}
int main(){
    LinkQueue Q;
    int e;
    Init(&Q);
    for(int i=1;i<=10;i++){
        EnQueue(&Q,i);
    }
    for(int i=0;i<10;i++){
        DeQueue(&Q,&e);
        printf("  %d\n",e);
    }
    return 0;
} 
时间: 2024-08-04 15:36:13

队列的链式存储及简单操作的相关文章

[转载]队列的链式存储

申明:转自    http://www.cnblogs.com/Romi/archive/2012/08/28/2660954.html 1 //队列的链式存储.C 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<malloc.h> 5 6 //定义队列 7 typedef struct node { 8 int data; 9 struct node *next; 10 }Queue; 11 12 //定义对手指

数据结构-队列-顺序链式存储

定义 队列(Queue):队列简称队,也是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除.向队列中插入元素称为入队或进队:删除元素称为出队或离队. 队列的操作 队列不可以读取对中间的元素. 队列的存储结构 顺序存储 链式存储 顺序存储 队列的顺序实现是指分配一块连续的存储单元存放队列中的元素,并附设两个指针front 和rear分别指示队头元素和队尾元素的位置. 设队头指针指向队头元素,队尾指针指向队尾 元素的下一个位置(也可以让rear指向队尾元素,front指向队头元

数据结构:队列的链式存储结构

链队列的实现方法: 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头节点,而队尾指针指向终端节点.空队列时,front和rear都指向头节点. 注意:这里的实现是有头结点的,在队列的初始化函数中要为头结点开辟空间. 链队列的实现代码: #include <iostream> #include <stdlib.h> using namespace std; /**********************

队列的链式存储结构及实现

ref : https://blog.csdn.net/qq_29542611/article/details/78907339 队列的链式存储结构,其实就是线性表的单链表,只不过它只是尾进头出而已,我们把它简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端节点.如果 空队列时,front和rear都指向头结点. 入队操作: 在队尾添加元素,先将队尾元素的next指向添加的元素,然后将队尾指针重新指向新的队尾即可. 出队操作: 头结结点指向的结点即为队头结点,出

队列(FIFO)—循环队列、队列的链式存储

1 队列的定义 队列是只允许在一端(队尾)进行插入操作,而在另一端(队头)进行删除操作的线性表. 2 队列的特点 1)先进先出是队列最大的特点,是应用中非常常见的模型,例如排队: 2)队列也属于线性表,线性表的特性队列都拥有. 3 循环队列的实现及关键点 3.1 关键点 1)队列为空的条件:队头指针等于队尾指针,即head == tial: 2)队列中保留一个元素空间,当队列满时,尾指针和头指针之间还剩一个元素空间.队列为满的条件:(tial + 1) % quenceSize == head:

队列的链式存储结构(C语言实现)

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define OK 1 5 #define ERR 2 6 #define TRUE 1 7 #define FALSE 0 8 9 typedef int status; //定义函数返回的状态,OK & ERR 10 typedef char datatype; //定义队列中每个元素的数据类型,这里暂定为字符型 11 12 typedef struct LinkQueue_

队列的链式存储---链表实现

/* 队列的链式存储 */ /* with no header */ struct Node; struct LinkQueue; typedef struct Node *PtrToNode; typedef struct LinkQueue *PtrTorf; struct Node{ ElementType X; PtrToNode Next; }; struct LinkQueue{ PtrToNode rear; PtrToNode front; }; int IsEmpty(PtrT

队列的链式存储---链表实现(有头结点)

/* 队列的链式存储 */ /* with header */ /* with no typedef */ struct Node{ ElementType Ele; struct Node *Next; }; struct LinQ{ struct Node *rear; struct Node *front; }; struct LinQ * CreateQ( void ) { struct LinQ *Ptr; struct Node *header; Ptr = malloc(sizeo

队列的链式存储(时间复杂度最小)

/* * 2015年4月17日14:04:56 * 目的:用链式存储来实现队列 * 这里我最开始想使用单链表来实现 * 大家来想一下啊,其实单链表实现不是特别好 * 因为虽然出队列的时间复杂度就是O(1),但是 * 入队列的时间复杂度却是O(n),因为每次都是从末尾进行插入 * 从末尾插入你首先就要找到当前指向尾指针的结点,由于链表是单向的 * 所以必须从front开始进行遍历才能找到rear前一个结点. * 为了解决入队列这个时间复杂度的问题,我觉得可以使用双向链表来解决 * 虽然这样会浪费一