结构:
typedef int status; typedef int qelemtype; typedef struct qnode { qelemtype data; struct qnode *next; }qnode,*queueptr; typedef struct { queueptr front; queueptr rear; }linkqueue;
初始化:
status initqueue(linkqueu *q) { //link queue init (*q).front = (*q).rear = malloc(sizeof(qnode)); if (!(*q).front) return ERROR; return OK; }
销毁:
status destroyqueue(linkqueue *q) { //link queue destroy while ((*q).front) { (*q).rear = (*q).front->next; free((*q).front); (*q).front = (*q).rear; } return OK; }
插入元素:
status enqueue(linkqueue *q,qelemtype e) { queueptr p=malloc(sizeof(qnode)); if (!p) return ERROR; p->next = NULL; p->data = e; (*q).rear->next = p; (*q).rear = p; return OK; }
删除元素:
status dequeue(linkqueue *q, qelemtype *e) { queueptr p; if ((*q).rear == (*q).front) 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; }
遍历:
void print(qelemtype e) { printf("%d\n", e); } status queuetraverse(linkqueue q,void (*vi)(qelemtype)) { queueptr p = q.front->next; while (p) { vi(p->data); p = p->next; } return OK; }