C 구현 대기 열
que.h
#define ut_base(TYPE) \
struct { \
TYPE *start; \
TYPE *end; \
}__attribute__((packed))
#define mem_alloc(TYPE,SIZE) \
(TYPE *)malloc(SIZE)
#define msg_err(msg)\
fprintf(stderr,msg)
typedef char byte;
typedef unsigned int uint;
typedef struct _pnode
{
void *data;
uint size;
char type;
struct _pnode *down;
}__attribute__((packed)) pnode;
typedef struct _que
{
uint len;
ut_base(struct _pnode) base;
}__attribute__((packed)) que;
/* create new queque*/
que *que_new();
/*add one element to queue */
int que_add(que *q,void *pdata,char type);
/*remove one element from que */
int que_pop(que *q);
/* destroy a queue*/
int que_destroy(que *q);
실현
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "que.h"
que *que_new()
{
que *q=mem_alloc(que,sizeof(que));
if(!q){msg_err("malloc memory for que fali
");return NULL;}
q->base.start=NULL;
q->base.end=NULL;
q->len=0;
return q;
}
int que_add(que *q,void *pdata,char type)
{
if(!q){msg_err("queue header is null
");return 1;}
pnode *elem=mem_alloc(pnode,sizeof(pnode));
if(!elem){msg_err("malloc for pnode fali
");return 1;}
char dtype=0;
int size=0;
if(q->base.start==NULL)
{
q->base.start=elem;
}
switch(type)
{
case 'I':
size=sizeof(int);
dtype='I';
break;
case 'S':
size=strlen((char *)pdata)+1;
dtype='S';
break;
case 'C':
size=sizeof(char);
dtype='C';
break;
default:
dtype='X';
break;
}
elem->data=mem_alloc(byte,size);
if(!elem->data){msg_err(" malloc memory for elem->data fail
");return 1;}
memcpy(elem->data,(byte *)pdata,size);
elem->size=size;
elem->type=dtype;
elem->down=q->base.end;
q->base.end=elem;
q->len++;
return 0;
}
int que_pop(que *q)
{
pnode *top=q->base.end->down;
pnode *prt=q->base.end;
q->base.end=top;
q->len--;
free(prt);
prt=NULL;
return 0;
}
int que_destroy(que *q)
{
printf("\t q->base.start = %p
",q->base.start);
while(q->base.end!=NULL)
{
printf("\t cur pnode = %p ,",q->base.end);
pnode *down=q->base.end->down;
free(q->base.end);
printf("free
");
q->base.end=down;
}
free(q);
return 0;
}
void que_prt(que *q)
{
pnode *p=q->base.end;
while(p!=NULL)
{
printf(" cur pnode = %p
",p);
switch(p->type)
{
case 'I':
printf("\tpnode->data = %d
",*((char *)p->data));
break;
case 'S':
printf("\tpnode->data = %s
",(char *)p->data);
break;
case 'C':
printf("\tpnode->data = %c
",*((char *)p->data));
break;
default:
break;
}
printf("\tpnode->size = %d
",p->size);
printf("\tpnode->type = %c
",p->type);
printf("\tpnode->down = %p
",p->down);
// printf("\tque->len = %d
",q->len);
p=p->down;
}
}
int main(void)
{
printf("sizeof que:%d
",sizeof(que));
que *q=que_new();
int x=100;
char *s="133";
char x1='P';
printf("que_add(%p,%c,%c): %d
",q,x1,x1,que_add(q,&x1,'C'));
printf("que_add(%p,%d,%c): %d
",q,x,'I',que_add(q,&x,'I'));
printf("que_add(%p,%s,%c): %d
",q,s,'S',que_add(q,s,'S'));
que_prt(q);
printf("que_destroy(%p): %d
",q,que_destroy(q));
q=que_new();
printf("que_add(%p,%c,%c): %d
",q,x1,x1,que_add(q,&x1,'C'));
printf("que_add(%p,%d,%c): %d
",q,x,'I',que_add(q,&x,'I'));
printf("que_add(%p,%s,%c): %d
",q,s,'S',que_add(q,s,'S'));
printf("que_pop(%p) :%d
",q,que_pop(q));
printf("que_pop(%p) :%d
",q,que_pop(q));
que_prt(q);
printf("que->len :%d
",q->len);
printf("que_destroy(%p): %d
",q,que_destroy(q));
//que_destroy(q);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.