frankzfz
全部博文(252)
2022年(12)
2017年(11)
2016年(7)
2015年(14)
2014年(20)
2012年(9)
2011年(20)
2010年(153)
2009年(6)
执着的KK
TM.
urgel_ba
可怜的猪
jurson
来点甜
cetcnav
max_3
zxszcaij
odessy
btrace
酷小川11
Victorzd
powertre
km康蒙92
simon_qi
天翼云开
BugMan
分类: C/C++
2010-07-31 14:02:02
typedef struct QNode { QElemType data; struct QNode *next; }*QueuePtr; typedef struct Queue { QueuePtr front,rear; //对头队尾指针 }LinkQueue;
Status InitQueue(LinkQueue **Q) {//构造一个空队列 if(!((*Q)->front = (*Q)->rear =(struct QNode *)malloc(sizeof(struct QNode)))) exit(OVERFLOW); (*Q)->front->next = NULL; return OK; } Status DestroyQueue(LinkQueue *Q) {//销毁队列Q while(Q->front) { Q->rear = Q->front->next; free(Q->front); Q->front = Q->rear; } return OK; } Status ClearQueue(LinkQueue *Q) {//将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; } Status QueueEmpty(LinkQueue *Q) {//若Q为空队列,则返回TRUE,否则返回FALSE if(Q->front == Q->rear) { return TRUE; } else { return FALSE; } } int QueueLength(LinkQueue *Q) {//求队列的长度 int i=0; QueuePtr p; p = Q->front; while(Q->rear !=p) { i++; p=p->next; } return i; } Status GetHead(LinkQueue *Q,QElemType *e) {//若队列不空,用e返回Q的队头元素,并返回OK ,否则返回ERROR; QueuePtr p; if(Q->front == Q->rear) return ERROR; p=Q->front->next; *e = p->data; return OK; } Status EnQueue(LinkQueue *Q,QElemType e) {//插入元素e为Q的新的队尾元素 QueuePtr p; if(!(p = (QueuePtr)malloc(sizeof(struct QNode)))) exit(OVERFLOW); p->data = e; p->next = NULL; Q->rear->next = p; Q->rear = p; return OK; } Status DeQueue(LinkQueue *Q,QElemType *e) {//若队列不空,删除Q的对头元素,用e返回其值,并返回OK,否则返回ERROR 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; } Status QueueTraverse(LinkQueue *Q,void(*vi)(QElemType)) {// 从队头到队尾依次对队列Q中每个元素调用函数vi(). QueuePtr p; p = Q->front->next; while(p) { vi(p->data); p=p->next; } printf("\n"); return OK; }
上一篇:单循环链表各种操作的C语言实现
下一篇:栈的各种操作的C语言实现
登录 注册