当前位置:网站首页>(9) Sequential queue and stack queue
(9) Sequential queue and stack queue
2022-06-22 07:53:00 【Day-3】
Sequential queue
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXSIZE 20
typedef struct RkQueue
{
int data[MAXSIZE];
int front;
int rear;
};
bool InitQueue(struct RkQueue * Queue)
{
Queue->front = 0;
Queue->rear = 0;
return true;
}
bool QueueEmpty(struct RkQueue Queue)
{
if (Queue.front == Queue.rear)
{
return true;
}
else
{
return false;
}
}
int QueueLength(struct RkQueue Queue)
{
int nRet = Queue.rear - Queue.front;
return nRet;
}
bool GetTop(struct RkQueue Queue, int * nData)
{
if (Queue.front == Queue.rear)
{
return false;
}
else
{
*nData = Queue.data[Queue.front];
return true;
}
}
bool DeQueue(struct RkQueue * Queue, int * nData)
{
if (Queue->front == Queue->rear)
{
return false;
}
else
{
*nData = Queue->data[Queue->front];
if (Queue->front == (MAXSIZE - 1))
{
Queue->front = 0;
return true;
}
else
{
Queue->front = Queue->front + 1;
return true;
}
}
}
bool EnQueue(struct RkQueue * Queue, int * nData)
{
if ((Queue->rear + 1) == MAXSIZE)
{
return false;
}
else
{
Queue->data[Queue->rear] = nData;
Queue->rear = Queue->rear + 1;
return true;
}
}
bool ShowQueueValue(struct RkQueue Queue)
{
if (Queue.front == Queue.rear)
{
printf("null\n");
return false;
}
for (size_t i = Queue.front; i < Queue.rear; i++)
{
printf("%d\n", Queue.data[i]);
}
return true;
}
int main()
{
struct RkQueue m_Rk;
InitQueue(&m_Rk);
for (size_t i = 0; i < 10; i++)
{
EnQueue(&m_Rk, i);
}
ShowQueueValue(m_Rk);
printf("Length = %d\n", QueueLength(m_Rk));
if (QueueEmpty(m_Rk))
{
printf("Empty!\n");
}
else
{
printf("Queue!\n");
}
int nData = 0;
GetTop(m_Rk, &nData);
printf("GetTop = %d\n", nData);
DeQueue(&m_Rk, &nData);
printf("DeQueue = %d\n", nData);
ShowQueueValue(m_Rk);
system("pause");
return 0;
}
Chain queue
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct _QueueNode
{
int data;
struct QueueNode *next;
}QueueNode,*PQueueNode;
typedef struct _LinkQueue
{
PQueueNode front;
PQueueNode rear;
}LinkQueue;
bool InitQueue(LinkQueue * Queue)
{
Queue->front = Queue->rear = (PQueueNode)malloc(sizeof(PQueueNode));
if (!Queue->front)
{
return false;
}
else
{
Queue->front->next = NULL;
return true;
}
}
bool DestoryQueue(LinkQueue * Queue)
{
while (Queue->front)
{
Queue->rear = Queue->front->next;
free(Queue->front);
Queue->front = Queue->rear;
}
return true;
}
bool ClearQueue(LinkQueue * Queue)
{
PQueueNode Temp1;
PQueueNode Temp2;
Queue->rear = Queue->front;
Temp1 = Queue->front->next;
Queue->front->next = NULL;
while (Temp1)
{
Temp2 = Temp1;
Temp1 = Temp1->next;
free(Temp2);
}
return true;
}
bool QueueEmpty(LinkQueue Queue)
{
if (Queue.front == Queue.rear)
{
return true;
}
else
{
return false;
}
}
int QueueLength(LinkQueue Queue)
{
int nCount = 0;
PQueueNode TempNode;
TempNode = Queue.front;
while (Queue.rear != TempNode)
{
TempNode = TempNode->next;
nCount++;
}
return nCount;
}
bool GetTop(LinkQueue Queue, int *nData)
{
PQueueNode TempNode;
if (Queue.front == Queue.rear)
{
return false;
}
else
{
TempNode = Queue.front->next;
*nData = TempNode->data;
return true;
}
}
bool EnQueue(LinkQueue * Queue, int nData)
{
PQueueNode TempNode = (PQueueNode)malloc(sizeof(QueueNode));
if (!TempNode)
{
return false;
}
else
{
TempNode->data = nData;
TempNode->next = NULL;
Queue->rear->next = TempNode;
Queue->rear = TempNode;
return true;
}
}
bool DeQueue(LinkQueue * Queue, int * nData)
{
PQueueNode TempNode;
if (Queue->front == Queue->rear)
{
return false;
}
else
{
TempNode = Queue->front->next;
*nData = TempNode->data;
Queue->front->next = TempNode->next;
if (Queue->rear == TempNode)
{
Queue->rear == Queue->front;
}
free(TempNode);
return true;
}
}
bool ShowQueueValue(LinkQueue Queue)
{
PQueueNode TempNode;
TempNode = Queue.front->next;
while (TempNode)
{
printf("Node Value = %d\n", TempNode->data);
TempNode = TempNode->next;
}
return true;
}
int main()
{
LinkQueue m_Rk;
InitQueue(&m_Rk);
for (size_t i = 0; i < 10; i++)
{
EnQueue(&m_Rk, i);
}
ShowQueueValue(m_Rk);
if (QueueEmpty(m_Rk))
{
printf("Empty!\n");
}
else
{
printf("Queue!\n");
}
printf("QueueLength = %d\n", QueueLength(m_Rk));
for (size_t i = 0; i < 5; i++)
{
int nData = 0;
DeQueue(&m_Rk, &nData);
printf("DeQueue = %d\n", nData);
}
ShowQueueValue(m_Rk);
int nData = 0;
GetTop(m_Rk, &nData);
printf("GetTop = %d\n", nData);
system("pause");
return 0;
}
边栏推荐
- Model electricity experiment -- Experiment 2 JFET common source amplifier circuit
- Introduction to several mainstream and easy-to-use rich text editors (WYSIWYG common editors)
- Impact of dead chain on websites
- JS array flattening (recursive writing)
- Canvastotempfilepath of wechat
- Simplicity is the best method of network promotion
- Detailed explanation of subnet mask
- Microsoft Remote Desktop 10.7.6 official
- Crmeb mall order shipping function
- setneedsdisplay layoutifneeded setNeedsLayout
猜你喜欢

Vue failed to connect to MySQL database

Template code overview

【宋红康 MySQL数据库 】【高级篇】【07】MySQL的存储引擎

Relative positioning, absolute positioning, fixed positioning

Backup the method of uploading babies in Taobao stores to multiple stores

Microsoft Remote Desktop 10.7.6 official

Open version - inventory description

Open version - order delivery

模电实验——实验二 JFET共源极放大电路

什么是分布式事务
随机推荐
对于mysql中数据为NULL引发的一些问题和思考
Impact of dead chain on websites
Wechat games (4)
Simplicity is the best method of network promotion
Docker install redis
New year's Day mall material Icon
Wechat games (I)
死链对网站的影响
Wechat games (3)
Error e: unable to locate package sudo
An example shows the difference between let and VaR
Xlua environment configuration
The ranking of websites is very important for websites
Phpcms mobile portal configuration
Backup the method of uploading babies in Taobao stores to multiple stores
LR 2022 ultra detailed installation tutorial "latest"
Docker command, docker installation sqlserver2019, docker installation MySQL (continuous update)
Microsoft Remote Desktop 10.7.6正式版
mysql截取字符串CS0000_1中_后面的字符
Template code overview