王道计算机考研 数据结构C语言复现-第六章-队列

 这篇文章收录了王道考研课程中涉及的数据结构的所有代码。此外,本博客可能会添加一些额外的代码(不仅限于王道考研),因为408考试中会频繁考察一些冷门的知识点,所以这篇博客会涵盖所有相关的代码。这也是我数据结构的第一轮复习,希望能与大家共同进步。由于博客篇幅的限制,可能无法一次性包含所有内容,欢迎指出代码错误部分!!!

你想要的都在下面!!!

// @FileName  :DuiLie.c
// @Time      :2023/8/14 20:49
// @Author    :YKW
# include 
# include 
# include 
//队列(Queue)只允许在一段进行插入(入队、队尾),在另一端删除的线性表
//顺序队列
#define MaxSize 10
typedef struct{
    int data[MaxSize];
    int front,rear;
    //int size;//计数变量,判断队列空满,插入加一,删除减一
    //int tag;//每次删除,=0,每次插入,=1
    //则队满:front==rear&&tag==1;
    //队空:front==rear&&tag==0;
}SqQueue;
void InitQueue(SqQueue *Q){
    Q->front=Q->rear=0;
}
//入队
bool EnQueue(SqQueue *Q,int x){
    if((Q->rear+1)%MaxSize==Q->front)//队列满,报错
        return false;
    Q->data[Q->rear]=x;
    Q->rear=(Q->rear+1)%MaxSize;//循环队列,牺牲一个储存空间,变成环状

}
//出队
bool DeQueue(SqQueue *Q,int x){
    if(Q->rear==Q->front)//判断队空
        return false;
    x=Q->data[Q->front];
    Q->front=(Q->front+1)%MaxSize;//队头指针后移
    return true;
}
//获得队头元素值,返回x
bool GetHead(SqQueue *Q,int x){
    if(Q->rear==Q->front)//判断队空
        return false;
    x=Q->data[Q->front];
    return true;
}
/*
 * 队满(Q->rear+1)%MaxSize==Q->front;
 * 队空Q->rear==Q.front;
 * */

//链队列
typedef struct LinkNode{//链式队列节点
    int data;
    struct LinkNode *next;
}LinkNode;
typedef struct {///链式队列
    LinkNode *front,*rear;//对头/尾指针
}LinkQueue;
void InitQueue2(LinkQueue *Q){
    Q->front=Q->rear=(LinkNode*)malloc(sizeof(LinkNode));
    Q->front->next=NULL;
}
//入队
void EnQueue2(LinkQueue *Q,int x){
    LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode));
    s->data=x;
    s->next=NULL;
    Q->rear->next=s;
    Q->rear=s;
}
//出队
bool DeQueue2(LinkQueue *Q,int *x){
    if(Q->front==Q->rear)//空队
        return false;
    LinkNode *p=Q->front->next;
    *x=p->data;//x返回被删除的元素
    Q->front->next=p->next;
    if(Q->rear==p)
        Q->rear=Q->front;
    free(p);
    return true;
}


//双端队列:两端均可插入删除
//输入(输出)受限的双端队列

你可能感兴趣的:(王道数据结构课程,考研,数据结构,链表,c语言)