데이터 구조 학습 - 대기 열
22451 단어 데이터 구조 C 언어데이터 구조
#include /* malloc() */
#include /* EOF(=^Z F6),NULL */
#include /* floor(),ceil(),abs() */
#include /* exit() */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
typedef int Status; /* Status , , OK */
typedef int QElemType;
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front,rear; /* 、 */
}LinkQueue;
Status InitQueue(LinkQueue *Q)
{ /* Q */
(*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));
if(!(*Q).front)
exit(OVERFLOW);
(*Q).front->next=NULL;
return OK;
}
Status EnQueue(LinkQueue *Q,QElemType e)
{ /* e Q */
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
if(!p) /* */
exit(OVERFLOW);
p->data=e;
p->next=NULL;
(*Q).rear->next=p;
(*Q).rear=p;
return OK;
}
//
Status QueueTraverse(LinkQueue Q)
{
QueuePtr p;
p=Q.front->next;
while(p)
{
printf("%d",p->data);
p=p->next;
}
printf("
");
return OK;
}
/* */
int QueueLength(LinkQueue Q)
{
int i=0;
QueuePtr p;
p=Q.front;
while(Q.rear!=p)
{
i++;
p=p->next;
}
return i;
}
/* , e Q , OK, ERROR */
Status GetHead_Q(LinkQueue Q,QElemType *e)
{
QueuePtr p;
if(Q.front==Q.rear)
return ERROR;
p=Q.front->next;
*e=p->data;
return OK;
}
/* , Q , e , OK, ERROR */
Status DeQueue(LinkQueue *Q,QElemType *e)
{
QueuePtr p;
if((*Q).front==(*Q).rear)
return ERROR;
p=(*Q).front->next;
*e=p->data;
(*Q).front->next=p->next;
if((*Q).rear==p)
(*Q).rear=(*Q).front;
free(p);
return OK;
}
/* Q */
Status ClearQueue(LinkQueue *Q)
{
QueuePtr p,q;
(*Q).rear=(*Q).front;
p=(*Q).front->next;
(*Q).front->next=NULL;
while(p)
{
q=p;
p=p->next;
free(q);
}
return OK;
}
/* Q( ) */
Status DestroyQueue(LinkQueue *Q)
{
while((*Q).front)
{
(*Q).rear=(*Q).front->next;
free((*Q).front);
(*Q).front=(*Q).rear;
}
return OK;
}
int main()
{
QElemType d;
LinkQueue q;
InitQueue(&q); //
int i;
for(i=1;i<=10;i++)
EnQueue(&q,i);
printf(" %d
",QueueLength(q));
QueueTraverse(q);
printf(" :%d
",GetHead_Q(q,&d));
DeQueue(&q,&d);
printf(" %d
",d);
GetHead_Q(q,&d);
printf(" :%d
",d);
ClearQueue(&q);
printf(" ,q.front=%u q.rear=%u q.front->next=%u
",q.front,q.rear,q.front->next);
DestroyQueue(&q);
printf(" ,q.front=%u q.rear=%u
",q.front, q.rear);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 단 방향 순환 목록 구현텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.