链式队列的本质:一个队头(有两个节点类型的指针:储存表头的地址和表尾的地址);
typedef struct node {
DATATYPE data;
struct node *next;
}Linknode;
typedef struct queue {
Linknode *front;
Linknode *rear;
}Linkqueue;
//先创建一个空的队列
Linkqueue *create_empty_linkqueue()
{
//创一个队头和一个头节点
Linkqueue *q;
q = (Linkqueue *)malloc(sizeof(Linkqueue));
Linknode *head;
head = (Linknode *)malloc(sizeof(Linknode));
if(head == NULL || q == NULL){
printf("Error,no free memory for malloc!\n");
return NULL;
}
q->front = head;
q->rear = head;
head->next = NULL;
return q;
}
链式结构不会满,所以只要判断是不是为空就行了
int is_empty_linkqueue(Linkqueue *q)
{
return L->front == L->rear ? 1 : 0;
}
数据进队列:
void enter_queue(Linkqueue *q, DATATYPE data)
{
Linknode *temp;
temp = (Linknode *)malloc(sizeof(Linknode));
if(temp == NULL){
printf("Error,no free memory for malloc!\n");
return;
}
temp->data =data;
temp->next = NULL;
q->rear->next = temp;
q->rear = temp;
return;
}
数据出队列:
DATATYPE delete_Linkqueue(Linkqueue *q)
{
DATATYPE data;
Linknode *t;
if(is_empty_linkqueue(q)){
printf("The linkqueue is empty!\n");
return;
}
t = q->front;
data = t->next->data;
q->front = t->next;
free(t);
return data;
}
阅读(2224) | 评论(0) | 转发(0) |