本人双非一本计算机系小白,几个月前从化学天坑跳到计算机,希望本系列能监督我练习敲数据结构的代码(在家真的效率好低QAQ),参考了《大话数据结构》和鄙校的数据结构教材(不敢恭维)。
目前为止我还没有在大学正式上过一节计算机专业课(除了c编基础公共必修),如果有大佬翻到本文并觉得我的代码写的是一坨,提前感谢您在评论区帮我指正!!!
之前一直没咋接触过国漫,昨天第一次看了中国惊奇先生的总集篇,感觉还行,就是画风有点粗糙,稍微有点低俗(不过我也就一俗人),看个乐呵。
本次练习了队列的链式存储结构
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int QElemType;
//创建链队列
typedef struct QNode //链结点
{
QElemType data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct //队列头尾
{
QueuePtr front, rear;
}LinkQueue;
//入队(在链表尾部插入结点)
Status EnQueue(LinkQueue *Q, QElemType e)
{
QueuePtr s = (QueuePtr)malloc(sizeof(QNode));
if(!s)
return ERROR;
s->data = e;
s->next = NULL; //s的下一个结点是空结点
Q->rear->next = s; //让指针的下一个指向新结点s
Q->rear = s; //这里我本来想写成 s = Q->rear,后来发现不对劲,因为Q->rear是一个指针,要让它指向s,而不是让s变成它
return OK;
}
//出队(将头结点的后继节点出队)
Status DeQueue( LinkQueue *Q, QElemType *e)
{
QueuePtr p;
if(Q->front == Q->rear)
return 0;
p = Q->front->next;
*e = p->data; //保存头结点的数据
Q->front->next = p->next; //p->next其实是Q->front->next的->next,也就是指向了出队的结点的下一个结点
if(Q->rear == p)
Q->rear = Q->front; //如果队头是队尾,则将rear指向头结点
free(p);
return OK;
}