대기열의 체인 구현 (c 언어)
42509 단어 데이터 구조 노트
#define EleType int
#define Status int
typedef struct QueueNode
{
EleType e;
struct QueueNode* next;
}QueueNode,*LinkQueuePoi;
typedef struct LinkQueue
{
LinkQueuePoi front;
LinkQueuePoi rear;
}LinkQueue;
(2) 빈 대기열 만들기
Status InitLinkQueue(LinkQueue* queue)
{
if (!queue)
{
return ERROR;
}
QueueNode* node = (QueueNode*)malloc(sizeof(QueueNode));
node->next = NULL;
queue->front = queue->rear = node;
return OK;
}
(3) 입고
Status CleaerLinkQueue(LinkQueue* queue)
{
if (!queue)
{
return ERROR;
}
//
if (queue->front == queue->rear)
{
return ERROR;
}
QueueNode* node = queue->front->next;
while (node)
{
queue->front->next = node->next;
if (queue->rear == node)
{
queue->rear = queue->front;
}
free(node);
node = queue->front->next;
}
return OK;
}
(4) 판정 공백
Status EmptyLinkQueue(LinkQueue* queue)
{
//
if (!queue)
{
return ERROR;
}
//
if (queue->front == queue->rear)
{
return TRUE;
}
return FALSE;
}
(5) 대장
int LengthLinkQueue(LinkQueue* queue)
{
//
if (!queue)
{
return ERROR;
}
//
if (queue->front == queue->rear)
{
return 0;
}
QueueNode* node = queue->front->next;
int num = 0;
while (node)
{
node = node->next;
num++;
}
return num;
}
(6) 빈 대기열 만들기
Status AddQueue(LinkQueue* queue,EleType e)
{
if (!queue)
{
return ERROR;
}
QueueNode* node = (QueueNode*)malloc(sizeof(QueueNode));
if (!node)
{
return ERROR;
}
node->next = NULL;
node->e = e;
queue->rear->next = node;
queue->rear = node;
return OK;
}
(7) 출대
Status DelQueue(LinkQueue* queue, EleType *e)
{
if (!queue)
{
return ERROR;
}
QueueNode* node = queue->front->next;
*e = node->e;
queue->front->next = node->next;
if (node = queue->rear)
{
queue->rear = queue->front;
}
return OK;
}
(8) 출력
void PrintfLinkQueue(LinkQueue* queue)
{
if (!queue)
{
return;
}
QueueNode* node = queue->front->next;
while (node)
{
printf("%d,", node->e);
node = node->next;
}
printf("
");
return;
}
(9) 호출된 주함수
int main(int argc, char *argv[])
{
LinkQueue queue;
InitLinkQueue(&queue);
AddQueue(&queue, 1);
AddQueue(&queue, 2);
AddQueue(&queue, 3);
AddQueue(&queue, 4);
printf(" :%d
",LengthLinkQueue(&queue));
printf(" :
");
PrintfLinkQueue(&queue);
int e1, e2;
DelQueue(&queue, &e1);
DelQueue(&queue, &e2);
printf(" :%d,%d
", e1, e2);
printf(" :
");
PrintfLinkQueue(&queue);
printf(" :%d
", LengthLinkQueue(&queue));
CleaerLinkQueue(&queue);
printf(" , %d,rear = %p,front=%p",LengthLinkQueue(&queue), queue.rear,queue.front);
printf("
");
return 0;
}
모든 조합 코드
#include
#include
#include
#include
#define QUEUESIZE 10
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
#define EleType int
#define Status int
typedef struct QueueNode
{
EleType e;
struct QueueNode* next;
}QueueNode,*LinkQueuePoi;
typedef struct LinkQueue
{
LinkQueuePoi front;
LinkQueuePoi rear;
}LinkQueue;
Status InitLinkQueue(LinkQueue* queue)
{
if (!queue)
{
return ERROR;
}
QueueNode* node = (QueueNode*)malloc(sizeof(QueueNode));
node->next = NULL;
queue->front = queue->rear = node;
return OK;
}
Status CleaerLinkQueue(LinkQueue* queue)
{
if (!queue)
{
return ERROR;
}
//
if (queue->front == queue->rear)
{
return ERROR;
}
QueueNode* node = queue->front->next;
while (node)
{
queue->front->next = node->next;
if (queue->rear == node)
{
queue->rear = queue->front;
}
free(node);
node = queue->front->next;
}
return OK;
}
Status EmptyLinkQueue(LinkQueue* queue)
{
//
if (!queue)
{
return ERROR;
}
//
if (queue->front == queue->rear)
{
return TRUE;
}
return FALSE;
}
int LengthLinkQueue(LinkQueue* queue)
{
//
if (!queue)
{
return ERROR;
}
//
if (queue->front == queue->rear)
{
return 0;
}
QueueNode* node = queue->front->next;
int num = 0;
while (node)
{
node = node->next;
num++;
}
return num;
}
s AddQueue(LinkQueue* queue,EleType e)
{
if (!queue)
{
return ERROR;
}
QueueNode* node = (QueueNode*)malloc(sizeof(QueueNode));
if (!node)
{
return ERROR;
}
node->next = NULL;
node->e = e;
queue->rear->next = node;
queue->rear = node;
return OK;
}
Status DelQueue(LinkQueue* queue, EleType *e)
{
if (!queue)
{
return ERROR;
}
QueueNode* node = queue->front->next;
*e = node->e;
queue->front->next = node->next;
if (node = queue->rear)
{
queue->rear = queue->front;
}
return OK;
}
void PrintfLinkQueue(LinkQueue* queue)
{
if (!queue)
{
return;
}
QueueNode* node = queue->front->next;
while (node)
{
printf("%d,", node->e);
node = node->next;
}
printf("
");
return;
}
int main(int argc, char *argv[])
{
LinkQueue queue;
InitLinkQueue(&queue);
AddQueue(&queue, 1);
AddQueue(&queue, 2);
AddQueue(&queue, 3);
AddQueue(&queue, 4);
printf(" :%d
",LengthLinkQueue(&queue));
printf(" :
");
PrintfLinkQueue(&queue);
int e1, e2;
DelQueue(&queue, &e1);
DelQueue(&queue, &e2);
printf(" :%d,%d
", e1, e2);
printf(" :
");
PrintfLinkQueue(&queue);
printf(" :%d
", LengthLinkQueue(&queue));
CleaerLinkQueue(&queue);
printf(" , %d,rear = %p,front=%p",LengthLinkQueue(&queue), queue.rear,queue.front);
printf("
");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
《 큰소리 데이터 구 조 》 노트 - day 2배열 의 길 이 는 선형 표를 저장 하 는 저장 공간의 길이 로 보통 변 하지 않 는 다 메모리 의 모든 저장 부 는 자신의 번 호 를 가지 고 있 는데 이 번 호 는 주소 계산 선형 표 의 위치 라 고 한다. 요소...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.