QUEUE.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:1k
源码类别:

Windows编程

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include "queue.h"
  3. qnode *addtoq(queue *q, void *p) {
  4. qnode *t;
  5. t = (qnode *) LocalAlloc(0, sizeof(qnode));
  6. if (t == NULL) return NULL;
  7. t->ptr = p;
  8. t->next = NULL;
  9. if (q->head == NULL) {
  10. t->prev = NULL;
  11. q->head = t;
  12. q->tail = t;
  13. } else {
  14. t->prev = q->tail;
  15. q->tail->next = t;
  16. q->tail = t;
  17. }
  18. return t;
  19. }
  20. void *removeheadfromq(queue *q) {
  21. qnode *t;
  22. void *p;
  23. if (q->head == NULL) return NULL;
  24. t = q->head;
  25. q->head = t->next;
  26. if (q->head == NULL) q->tail = NULL;
  27. else q->head->prev = NULL;
  28. p = t->ptr;
  29. LocalFree(t);
  30. return p;
  31. }
  32. void *removeqnodefromq(queue *q, qnode *t) {
  33. void *p;
  34. if (q->head == t) q->head = t->next;
  35. if (q->tail == t) q->tail = t->prev;
  36. if (t->next != NULL) t->next->prev = t->prev;
  37. if (t->prev != NULL) t->prev->next = t->next;
  38. p = t->ptr;
  39. LocalFree(t);
  40. return p;
  41. }
  42. queue *newq(void) {
  43. queue *q;
  44. q = (queue *) LocalAlloc(0, sizeof(queue));
  45. if (q == NULL) return NULL;
  46. q->head = NULL;
  47. q->tail = NULL;
  48. return q;
  49. }