데이터 구조선형 표순서 대기 행렬순환 대기 행렬체인 큐
8966 단어 데이터 구조
#pragma mark --abstract
// (queue) , , (rear)
// (font),
// (FIFO )
#pragma mark --
//1. (sequential queue), . : ,
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#pragma mark --
#if 0
#define maxsize 10 //
typedef int elemtype;
typedef struct {
elemtype elem[maxsize];
int font,rear;
}sequeuetp;
#endif
// sa sequeuetp
//
//sq.rear=sq.rear+1;
//sq.elem[sq.rear]=x;
//
//sq.font=sq.font+1
// sq.font=sq.rear
// sq.rear=maxsize , ,
//2.
// , sq.elem[0] sq.elem[maxsize-1] , 1
//
//sq.rear=(sq.rear+1)%maxsize
//sq.elem[sq.rear]=x;
//
//sq.font=(sq.font+1)%maxsize
// sq.rear=sq.font;
// (sq.rear+1)%maxsize=sq.font;
#pragma mark ------------- --------------------
#define maxsize 11 //( 10 +1)
typedef int elemtype;
typedef struct {
elemtype elem[maxsize];
int font,rear;
}cqueuetp;
#pragma mark --
void initQueue(cqueuetp*cq) {
cq->font=0;
cq->rear=0;
}
#pragma mark
bool QueueEmpty(cqueuetp*cq) {
return (*cq).font==(*cq).rear?true:false;
}
#pragma mark
int size(cqueuetp*cq) {
// maxsize cq->rear -cq->font<0
return (maxsize+cq->rear-cq->font)%maxsize;
}
#pragma mark
elemtype Head(cqueuetp*cq) {
if (cq->rear==cq->font) {//
return NULL;
}
else {
return cq->elem[cq->font+1]%maxsize;
}
}
#pragma mark
void EntrayQueue(cqueuetp*cq,elemtype x) {
if ((cq->rear+1)%maxsize==cq->font) { //
printf("overflow
");
}
else {
cq->rear=(cq->rear+1)%maxsize;
cq->elem[cq->rear]=x;
}
}
#pragma mark
elemtype DeletQueue(cqueuetp*cq) {
if ((*cq).font==(*cq).rear) {
return NULL;
}else {
cq->font=(cq->font+1)%maxsize;
return (cq->elem[cq->font]);
}
}
#pragma mark ------------------ ---------------------
// , ,
// (linked queue), ,
// , , ,
// , , , O(1) O(n)
// lq.front=lq.rear;
#pragma mark --
typedef struct node{
elemtype data;
struct node*next;;
}nodetype;
typedef struct {
nodetype *front;
nodetype *rear;
}lqueue;
#pragma mark --
void initLqueue(lqueue*lq) {
//
lq->front=(nodetype*)malloc(sizeof(nodetype));
lq->front->next=NULL;
lq->rear=lq->front;
}
#pragma mark --
bool EmptyLqueue(lqueue*lq) {
return lq->front==lq->rear?true:false;
}
#pragma mark --
int lqSize(lqueue*lq) {
int i=0;
nodetype*p=lq->front->next;
while (p) {
i++;
p=p->next;
}
return i;
}
#pragma mark --
elemtype getHead(lqueue*lq) {
if (lq->front==lq->rear) {
return NULL;
}
else {
return lq->front->next->data;
}
}
#pragma mark
void EntryQueue(lqueue*lq,elemtype x){
nodetype*s;
s=(nodetype*)malloc(sizeof(nodetype));
s->data=x;
s->next=NULL;
lq->rear->next=s;
lq->rear=s;
}
#pragma mark
elemtype delQueue(lqueue*lq){
elemtype x;
nodetype*p;
if (lq->front==lq->rear) {
return NULL;
}
else {
p=lq->front->next;
lq->front->next=p->next;
if (p->next==NULL) // ,
lq->rear=lq->front;
x=p->data;
free(p);
return x;
}
}
#pragma mark
//1> ,
//2> , , , ,
//3> , , , ,
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.