队列-链队列

结构:
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;
 }


猜你喜欢

转载自blog.csdn.net/aabb7012086/article/details/80662819