xiaozhu2007
全部博文(103)
2008年(77)
2007年(26)
xiaobo20
cynthia
浪花小雨
GLM89122
Mr_Ran
sun2011y
feel_hyq
tinnal
竟成007
lovebing
分类: C/C++
2007-12-22 23:40:00
/* 该实现front始终指向当前的头结点,rear始终指向尾结点的 下一个结点 */ #include <stdio.h> #include <stdlib.h> #define MAXNUM 10 #define datatype int typedef struct queue{ int queue[MAXNUM]; int front; int rear; }queue; void initqueue(queue** p) { *p = (queue* )malloc(sizeof(queue)); if(*p != NULL){ (*p)->front = 0; (*p)->rear = 0; } } int emptyqueue(queue** p) { int val; val = ((*p)->front == (*p)->rear); return val; } void enqueue(queue** p, datatype x)//将x插入队尾 { if(((*p)->rear+1)%MAXNUM == (*p)->front){ printf("the queue is full\n"); return; } (*p)->queue[(*p)->rear] = x; (*p)->rear = ((*p)->rear+1)%MAXNUM; } void delqueue(queue** p, datatype* x)//删除队列头元素,用x返回 { if((*p)->front == (*p)->rear){ printf("the queue is empty\n"); return; } *x = (*p)->queue[(*p)->front]; (*p)->front = ((*p)->front+1)%MAXNUM; } void firstqueue(queue** p, datatype* x)//返回队列头元素 { *x = (*p)->queue[(*p)->front]; } void prqueue(queue** p)//打印队列元素 { int i; i = (*p)->front; while(i != (*p)->rear){ printf("%c", (*p)->queue[i]); i = (i + 1) % MAXNUM; } printf("\n"); } int main(int argc, char** argv) { queue* p; int c, i; initqueue(&p); printf("input queue node value:\n"); /*** while((c = getchar()) !='\n'){ enqueue(&p, c); } ***/ prqueue(&p); for(i = 0; i < 3; i++){ delqueue(&p, &c);//删除一个头元素 } printf("\n"); enqueue(&p, '*'); enqueue(&p, '$'); prqueue(&p); firstqueue(&p, &c); printf("first queue is %c\n", c); exit(0); }
上一篇:广度优先遍历(Breadth-FirstTraversal)
下一篇:Linux下的多进程编程
登录 注册