2008年10月17日星期五

队列:节点插入,节点删除,测长,建立

#include <stdio.h>
#include <stdlib.h>

typedef struct node_x {
   int data;

   struct node_x *next;
}qnode;

typedef struct queue_x {
   qnode *head;
   qnode *rear;
}queue;


void print_queue(queue *q)
{
   printf("the queue:\n");
   qnode *p = q->head;

   while (p) {
       printf("%d ", p->data);
       p = p->next;
   }

   printf("\n");
}

int length_queue(queue *q)
{
   int len = 0;
   qnode *p = q->head;

   while (p) {
       len++;
       p = p->next;
   }

   return len;
}

int delete_qnode(queue *q)
{
   qnode *p;
   int data;

   if (!q->head)
       return;

   data = q->head->data;

   p = q->head->next;

   free(q->head);

   q->head = p;

   if (!p) q->rear = NULL;

   return data;
}

void insert_qnode(queue *q, int data)
{
   qnode *p, *s;

   s = (qnode*)malloc(sizeof(qnode));
   s->data = data;
   s->next = NULL;

   if (!q->rear) {
       q->head = s;

   } else {
       q->rear->next = s;
   }

   q->rear = s;
}

queue * creat_queue(void)
{
   queue *q;
   q = (queue *)malloc(sizeof(queue));
   q->head = NULL;
   q->rear = NULL;
   int data;

   while (1) {
       printf("insert a num:");
       scanf("%d", &data);

       if (data == 0) break;

       insert_qnode(q, data);
   }

   return q;
}

int main(void)
{
   printf("creat a queue:\n");
   queue *q = creat_queue();
   print_queue(q);

   printf("queue length:%d\n", length_queue(q));

   printf("delete a qnode :\n");
   delete_qnode(q);
   print_queue(q);

   printf("insert a qnode 3:\n");
   insert_qnode(q, 3);
   print_queue(q);

   return 0;
} 

没有评论:

发表评论