目录

  • 1 第一章 绪论
  • 2 第二章 线性表
    • 2.1 单链表的案例讲解——学生信息管理系统
  • 3 第三章 栈和队列
    • 3.1 顺序栈的代码
    • 3.2 链栈的代码
    • 3.3 栈的案例源代码
    • 3.4 顺序队列的代码
    • 3.5 链队的代码
  • 4 串、数组、广义表
    • 4.1 顺序串的源代码
    • 4.2 链串的源代码
    • 4.3 串部分的课件
    • 4.4 数组部分的课件
    • 4.5 广义表的课件
  • 5 树与二叉树
    • 5.1 二叉链表法存储树代码与课件
  • 6 图
    • 6.1 图的课件
    • 6.2 图的相关源代码
  • 7 查找
    • 7.1 查找的课件
    • 7.2 查找的相关源代码
链队的代码

#include "stdio.h"
#include "stdlib.h"
typedef int ElemType;
typedef struct qnode
{     ElemType data; //数据元素
    struct qnode *next;
}LinkNode;//结点类型定义
typedef struct{
    LinkNode *front;
    LinkNode *rear;
}LinkQueue;//队列类型定义
void InitQueue(LinkQueue *&q)//初始化队列
{     q=(LinkQueue *)malloc(sizeof(LinkQueue));
    q->front=q->rear=NULL;
}
void DestroyQueue(LinkQueue *&q)//销毁队列
{     LinkNode *p=q->front, *r; //p指向队头数据节点
    if (p!=NULL) //释放数据节点占用空间
    {     r=p->next;
        while (r!=NULL)
        {     free(p);
            p=r; r=p->next;
        }
    }
    free(p); free(q); //释放链队节点占用空间
}
int QueueEmpty(LinkQueue *q)//判断队空
{
    return(q->rear==NULL);
}
void EnQueue(LinkQueue *&q,ElemType e)//入队操作
{     LinkNode *p;
    p=(LinkNode *)malloc(sizeof(LinkNode));
    p->data=e;
    p->next=NULL;
    if (q->rear==NULL) //若链队为空,新节点是队首节点又是队尾节点
        q->front=q->rear=p;
    else
    {     q->rear->next=p; //将*p节点链到队尾,并将rear指向它
        q->rear=p;
    }
}
int DeQueue(LinkQueue *&q,ElemType &e)//出队操作
{     LinkNode *t;
    if (q->rear==NULL)
        return 0; //队列为空
    t=q->front; //t指向第一个数据节点
    if (q->front==q->rear) //队列中只有一个节点时
        q->front=q->rear=NULL;
    else //队列中有多个节点时
        q->front=q->front->next;
    e=t->data;
    free(t);
    return 1;
}

int main()
{
    LinkQueue *Q;
    ElemType e;
    InitQueue(Q);//初始化队列测试
    
    EnQueue(Q,10);//入队测试
    
    DeQueue(Q,e) ;//出队测试
    printf("出队值为%d\n",e);
    
    if(QueueEmpty(Q))//判断队空测试
        printf("空队\n");
    else
        printf("非空队\n");
    
    DestroyQueue(Q);//销毁队列测试
    
 }