链式队列定义、插入、删除

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

#define ElemType int
typedef struct QNode
{
    ElemType data;//定义队列中的元素
    struct QNode *next;
}QNode;

typedef struct LinkQueue
{
    QNode *front;
    QNode *rear;
}LinkQueue;//定义一个队列,队列只有一个头指针和一个尾指针

//队列的初始化
void InitQueue(LinkQueue *q)
{
    q->front = (LinkQueue*)malloc(sizeof(QNode));
    if(!q->front)
    {
        exit(0);
    }
    q->rear = q->front;
    q->front->next = NULL;
}

//队列的插入
void InsertQueue(LinkQueue *p,ElemType *e)
//队列为p,要插入的元素为e,队列的rear指针指向队列的最后一个元素。队列的front指针指向头结点,头结点无元素
{
    QNode *ptr;
    ptr = (LinkQueue*)malloc(sizeof(QNode));
    ptr->data = *e;
    ptr->next = NULL;
    p->rear->next = ptr;
//    p->rear = p->rear->next;
    p->rear = ptr;
}

//队列的删除
void DeleteQueue(LinkQueue *p,ElemType *e)
{
    QNode *s;
    if(p->front == p->rear)
    {
        return;
    }
    s = p->front->next;
    *e = s->data;
    p->front->next = s->next;
 //   if(s == p->rear)
    if(p->front->next == NULL)//用这条也可以是等价的
    {
        p->front = p->rear;
    }
    free(s);
}

//销毁一个队列
void DestoryQueue(LinkQueue *p)
{
    while(p->front)
    {
        p->rear = p->front->next;//p->front->next == NULL
        free(p->front);//释放p的头结点
        p->front = p->rear;//把p的front和rear都置为NULL
    }

}
int main()
{
    int i;
    LinkQueue p;
    ElemType e;
    InitQueue(&p);
    for(i = 1;i <= 10;i++)
    {
        InsertQueue(&p,&i);
    }

    for(i = 1;i <= 10;i++)
    {
        DeleteQueue(&p,&e);
        printf("%2d",e);
    }
    return 0;
}

 输入一个字符串以字符‘#‘结束,在屏幕上打印出来

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

#define M 100
#define ElemType char
typedef struct QNode
{
    ElemType data;//定义队列中的元素
    struct QNode *next;
}QNode;

typedef struct LinkQueue
{
    QNode *front;
    QNode *rear;
}LinkQueue;//定义一个队列,队列只有一个头指针和一个尾指针

//队列的初始化
void InitQueue(LinkQueue *q)
{
    q->front = (LinkQueue*)malloc(sizeof(QNode));
    if(!q->front)
    {
        exit(0);
    }
    q->rear = q->front;
    q->front->next = NULL;
}

//队列的插入
void InsertQueue(LinkQueue *p,ElemType *e)
//队列为p,要插入的元素为e,队列的rear指针指向队列的最后一个元素。队列的front指针指向头结点,头结点无元素
{
    QNode *ptr;
    ptr = (LinkQueue*)malloc(sizeof(QNode));
    ptr->data = *e;
    ptr->next = NULL;
    p->rear->next = ptr;
//    p->rear = p->rear->next;
    p->rear = ptr;
}

//队列的删除
void DeleteQueue(LinkQueue *p,ElemType *e)
{
    QNode *s;
    if(p->front == p->rear)
    {
        return;
    }
    s = p->front->next;
    *e = s->data;
    p->front->next = s->next;
 //   if(s == p->rear)
    if(p->front->next == NULL)//用这条也可以是等价的
    {
        p->front = p->rear;
    }
    free(s);
}

//销毁一个队列
void DestoryQueue(LinkQueue *p)
{
    while(p->front)
    {
        p->rear = p->front->next;//p->front->next == NULL
        free(p->front);//释放p的头结点
        p->front = p->rear;//把p的front和rear都置为NULL
    }

}
int main()
{
    int i,len = 0;
    LinkQueue p;
    ElemType e;
    char c;
    InitQueue(&p);
    printf("输入字符串:\n");
    scanf("%c",&c);
    while(c != ‘#‘)
    {
        InsertQueue(&p,&c);
        len++;
        scanf("%c",&c);
    }
    printf("字符串为:\n");
    for(i = 1;i <= len;i++)
    {
        DeleteQueue(&p,&e);
        printf("%c",e);
    }
    return 0;
}

  

 

时间: 2024-11-05 13:37:59

链式队列定义、插入、删除的相关文章

链式队列的C++实现

链式队列的C++实现 一.数据结构 struct QNode //定义队列结点的数据结构 { QNode *next; //指针域,指向下一个结点 double data; //数据域,存储队列信息 }; struct LinkQueue //定义队列的数据结构 { QNode *front; //队首指针,指向QNode类型的指针 QNode *rear; //队尾指针 }; void InitQueue(LinkQueue &Q) //构造一个空的队列 int IsEmpty(LinkQue

c++实验5 顺序/链式队列

链式队列及循环队列 1.循环队列的实现(请采用模板类及模板函数实现) [实现提示] 同时可参见教材p65-p67页的ADT描述及算法实现及ppt)函数.类名称等可自定义,部分变量请加上学号后3位.也可自行对类中所定义的操作进行扩展. 所加载的库函数或常量定义及类的定义: #include<stdlib.h> #include<iostream> using namespace std; typedef int DataType; class SeqQueue{ private: D

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

数据结构Java实现07----队列:顺序队列&顺序循环队列.链式队列.顺序优先队列 一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-

数据结构之---C语言实现链式队列

//链式队列的存储 //杨鑫 #include <stdio.h> #include <stdlib.h> typedef int QElemType; //定义节点 typedef struct QNode { QElemType data; struct QNode *next; }QNode, *QueuePtr; //定义指针 typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; //插入元素e进入队列 vo

【数据结构-队列】链式队列

关于链式队列 链式队列又称为链队,是使用单链表实现的,需要一个头指针一个尾指针 结构图: 链队需要的元素组成 /*链式队列的每一个节点*/ struct node{ int data;//存储数据 struct node *next;//指向下一个节点的指针 }; /*链式队列*/ typedef struct{ struct node *head;//头指针 struct node *tail;//尾指针 }LinkedQueue; 创建一个带头节点的空队列 创建一个节点p 将p节点的next

有序链式队列

  编写头文件 struct queue { int num;            //代表数据 int high;           //优先级1111 struct queue *pNext;//存储下一个节点的地址 }; typedef  struct queue Queue;                           //简化队列 Queue * init(Queue *queueHead);                        //初始化 Queue *

C++链式队列

LinkQueue: //链式队列 #include<iostream> using namespace std; typedef int elemType; struct QNode { elemType data; QNode *next; }; struct LinkQueue { QNode *front; QNode *rear; }; //初始化 void InitQueue(LinkQueue *q) { q->front = q->rear = new QNode;

不带头结点的链式队列进出队操作

/* 不带头结点的链式队列进出队操作 */ #include <stdio.h> #include <stdlib.h> #define ElementType int typedef struct QNode *Queue; typedef struct Node{ ElementType Data; struct Node *Next; }; typedef struct QNode{ struct Node *front; struct Node *rear; }; void

链式队列总结

基本数据结构之-链式队列 链式队列就是一个操作受到限制的单链表,学会了单链表再来写这个就是轻松加愉快,但是貌似我去用了两个小时搞定,主要是基础差! 队列的基本操作就是入栈和出栈,还可以看到对头和对尾 如果维护了长度参数,那么也可以返回一个长度 不说理论了,直接上代码吧! 首先定义基本数据结构的结构体: typedef struct _LINKQUEUENODE { struct _LINKQUEUENODE *next; }LinkQueueNode; typedef struct _LINKQ