陕西城乡建设网站,wordpress 编辑 所见即所得插件,广州微网站,seo搜索引擎优化人员一、个人理解队列是线性表的衍生之一#xff0c;具有先进先出的特性#xff0c;在队尾进行插入操作#xff0c;在队头进行删除操作。队列的存储结构分为两个大类#xff0c;一种是顺序队#xff0c;就是用数组实现。另一种就是链队#xff0c;使用链表实现。顺序队存在真…一、个人理解队列是线性表的衍生之一具有先进先出的特性在队尾进行插入操作在队头进行删除操作。队列的存储结构分为两个大类一种是顺序队就是用数组实现。另一种就是链队使用链表实现。顺序队存在真上溢和假上溢两种情况真上溢指的是数据真的满了。假上溢举例的话就是队头索引由于出队删除数据而上移例如变为10号索引位会空出来而队尾索引已到达数组最大长度这时就会出现空间浪费的情况所以引入了循环顺序队的概念。二、顺序队图解三、循环顺序队图解当循环顺序队长度不满时0、1、2号索引位没有数据或者说有可以抹除的数据不能浪费如图队最大长度6队尾索引是5队头索引是351%60又回到了0可以继续插入数据避免了空间的浪费。四、结构体1、ElemType1说明存放自定义数据。2源码typedef struct ElemType
{char StudentNum[StudentNumLen];char StudentName[StudentNameLen];int StudentScore;
}ElemType;2、SqQueue1说明Data数据。FrontIndex队头索引。RearIndex队尾索引。SqQueueLen队的长度。2源码typedef struct SqQueue
{ElemType* Data;QueueLenType FrontIndex; //队头出队时用。QueueLenType RearIndex; //队尾入队时用。QueueLenType SqQueueLen;
}SqQueue;五、自定义数据类型typedef int Status;typedef unsigned long long int QueueLenType;六、函数1、InitSqQueue1用途初始化顺序队。2源码Status InitSqQueue(SqQueue* SQ)
{JudgeAllNullPointer(SQ);SQ-Data (ElemType*)MyMalloc(sizeof(ElemType) * SQ_QUEUE_MAX_SIZE);SQ-FrontIndex 0;SQ-RearIndex 0;SQ-SqQueueLen 0;Log(Init SqQueue : OK\n,Info);return SuccessFlag;
}3参数参数名说明SQ需要初始化的SqQueue*类型顺序队。2、GetSqQueueLen1用途获取顺序队长度。2源码QueueLenType GetSqQueueLen(SqQueue* SQ)
{JudgeAllNullPointer(SQ);return SQ-SqQueueLen;
}3参数参数名说明SQSqQueue*类型顺序队。3、EnterSqQueue1用途入队将ElemType类型的数据插入到循环顺序队的队尾。2源码Status EnterSqQueue(SqQueue* SQ, ElemType E)
{JudgeAllNullPointer(SQ);if(GetSqQueueLen(SQ) SQ_QUEUE_MAX_SIZE){Log(SqQueue is full, Data cannot be entered\n,Warning);return FailFlag;}SQ-SqQueueLen;SQ-Data[SQ-RearIndex] E;SQ-RearIndex (SQ-RearIndex 1) % SQ_QUEUE_MAX_SIZE;Log(Enter SqQueue : OK\n,Info);return SuccessFlag;
}3参数参数名说明SQSqQueue*类型顺序队。E需要插入ElemType类型的数据。4、LeaveSqQueue1用途出队将出队元素赋予ElemType* E作为输出参数。2源码Status LeaveSqQueue(SqQueue* SQ, ElemType* E)
{JudgeAllNullPointer(SQ);JudgeAllNullPointer(E);if(GetSqQueueLen(SQ) 0){Log(SqQueue is Empty, Data cannot be left\n,Warning);return FailFlag;}SQ-SqQueueLen--;*E SQ-Data[SQ-FrontIndex];SQ-FrontIndex (SQ-FrontIndex 1) % SQ_QUEUE_MAX_SIZE;Log(Leave SqQueue : OK\n,Info);return SuccessFlag;
}3参数参数名说明SQSqQueue*类型顺序队。E输出参数给一个ElemType* 类型指针即可。5、GetSqQueueTop1用途获取顺序队队头数据如果队是空队返回ElemType的类型数据{,,0}。2源码ElemType GetSqQueueTop(SqQueue* SQ)
{JudgeAllNullPointer(SQ);if(GetSqQueueLen(SQ) 0){Log(SqQueue is Empty, cant get SqQueueTop\n,Warning);ElemType res {,,0};return res;}return SQ-Data[SQ-FrontIndex];
}3参数参数名说明SQSqQueue*类型顺序队。七、虚机测试[gbaseczg2 LinearTable_SqQueue]$ make
gcc -Wall -g ../Log/Log.c SqQueue.c main.c -o TestSqQueue -I ../Log/[gbaseczg2 LinearTable_SqQueue]$ ./TestSqQueue
2023-2--Info--Init SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Warning--SqQueue is full, Data cannot be entered
2023-2--Warning--SqQueue is full, Data cannot be entered
2023-2--Debug--SqQueue Data :
StudentNum : X666
StudentName : Sun
StudentScore : 100StudentNum : X666
StudentName : Sun
StudentScore : 101StudentNum : X666
StudentName : Sun
StudentScore : 102StudentNum : X666
StudentName : Sun
StudentScore : 103StudentNum : X666
StudentName : Sun
StudentScore : 104StudentNum : X666
StudentName : Sun
StudentScore : 105FrontIndex : 0
RearIndex : 0
SqQueueLen : 6
2023-2--Info--Leave SqQueue : OK
2023-2--Debug--ElemType Data :
StudentNum : X666
StudentName : Sun
StudentScore : 100
2023-2--Info--Leave SqQueue : OK
2023-2--Debug--ElemType Data :
StudentNum : X666
StudentName : Sun
StudentScore : 101
2023-2--Info--Leave SqQueue : OK
2023-2--Debug--ElemType Data :
StudentNum : X666
StudentName : Sun
StudentScore : 102
2023-2--Info--Leave SqQueue : OK
2023-2--Debug--ElemType Data :
StudentNum : X666
StudentName : Sun
StudentScore : 103
2023-2--Debug--SqQueue Data :
StudentNum : X666
StudentName : Sun
StudentScore : 104StudentNum : X666
StudentName : Sun
StudentScore : 105FrontIndex : 4
RearIndex : 0
SqQueueLen : 2
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Debug--SqQueue Data :
StudentNum : X666
StudentName : Sun
StudentScore : 104StudentNum : X666
StudentName : Sun
StudentScore : 105StudentNum : X666
StudentName : Sun
StudentScore : 100StudentNum : X666
StudentName : Sun
StudentScore : 101StudentNum : X666
StudentName : Sun
StudentScore : 102StudentNum : X666
StudentName : Sun
StudentScore : 103FrontIndex : 4
RearIndex : 4
SqQueueLen : 6
2023-2--Debug--ElemType Data :
StudentNum : X666
StudentName : Sun
StudentScore : 104