代码改变世界

队列

2013-02-01 09:43  Dr.Ray  阅读(205)  评论(0)    收藏  举报

经验总结:

1、队列必须用结构体指针,否则调用函数时也是传值调用,无法改变结构体变量的值。

2、队列中的数组用指针表示较好。

3、在写printqueue函数时,我的码会导致当i=max,i=0,后无法让i=0与p->tail判断是否相等,导致死循环。

以后注意在多重选择结构语句时验证是否每一个值都会被相应的判断语句验证一遍

下面是代码。已经过编译验证为正确

 

#include<stdio.h> #include<stdlib.h> #define max 5

struct queue {     int head,tail;     int *num; };

void iniqueue(queue * p) {     p->num=(int *)malloc(5*sizeof(int));     p->head=0;     p->tail=max-1; }

void enqueue(queue *p,int a) {     p->tail++;     if(p->tail==max)     {         p->tail=0;     }     p->num[p->tail]=a; }

void dequeue(queue *p) {     p->head++;     if(p->head==max)     {         p->head=0;     } }

void printqueue(queue *p)//一开始的码会导致p->tail=0的时候不被判断是否i和tail相等导致死循环 {     for(int i=p->head;;i++)     {         if(i==max)         {             i=0;         }         if(i==p->tail)         {             printf("%d\n",p->num[i]);             break;         }         else printf("%d\n",p->num[i]);     } }

int searchqueue(queue *p,int a) {     for(int i=p->head;;i++)     {         if(p->num[i]==a)         {             return i;         }         else if(i==p->tail)         {             return -1;         }         else if(i==max-1)         {             i=0;         }     } }

void delequeue(queue *p) {     free(p->num); }

int main() {     queue *p;     iniqueue(p);     enqueue(p,1);     enqueue(p,2);     enqueue(p,3);     enqueue(p,4);     enqueue(p,5);     printqueue(p);     dequeue(p);     printf("*********************\n");     enqueue(p,6);     printqueue(p);     printf("*******************\n");     printf("%d\n",searchqueue(p,3));     delequeue(p);

}