1.代码实现链式队列,输入数据入队,输入字符出队。
test.c
#include <stdio.h>
#include "linkqueue.h"
int main(int argc, const char *argv[])
{
linkqueue *lq;
int value;
lq = queue_create();
if(lq == NULL){
return -1;
}
printf("nums join,char out queue:\n");
printf("input:");
while(scanf("%d",&value)){
queue_insert(lq,value);
printf("input:");
}
while(!queue_empty(lq)){
printf("%d\n",queue_delete(lq));
}
//queue_free(lq);
return 0;
}
linkqueue.h
#ifndef _LINKQUEUE_
#define _LINKQUEUE_
typedef int data_t;
typedef struct node{
data_t data;
struct node *next;
}listnode,*linklist;
typedef struct {
linklist front;
linklist rear;
}linkqueue;
linkqueue *queue_create();
int queue_free(linkqueue *lq);
int queue_insert(linkqueue *lq,int data);
int queue_delete(linkqueue *lq);
int queue_empty(linkqueue *lq);
#endif
linkqueue.c
#include <stdio.h>
#include <stdlib.h>
#include "linkqueue.h"
linkqueue *queue_create()
{
linkqueue *lq;
linklist p;
p = (linklist)malloc(sizeof(listnode));
if(NULL == p){
return NULL;
}
p->data =0;
p->next = NULL;
lq = (linkqueue *)malloc(sizeof(linkqueue));
if(NULL == lq){
return NULL;
}
lq->front = lq->rear = p;
return lq;
}
int queue_insert(linkqueue *lq,int data)
{
linklist new;
new = (linklist)malloc(sizeof(listnode));
if(NULL == new){
return -1;
}
new->data = data;
new->next = NULL;
lq->rear->next = new;
lq->rear = new;
return 0;
}
int queue_delete(linkqueue *lq)
{
linklist p;
if(lq == NULL){
return -1;
}
p = lq->front;
lq->front = p->next;
free(p);
p = NULL;
return (lq->front->data);
}
int queue_empty(linkqueue *lq)
{
return (lq->front == lq->rear ? 1:0);
}
int queue_free(linkqueue *lq)
{
if(lq == NULL){
return -1;
}
while(lq->front){
queue_delete(lq);
}
free(lq);
}
注意:创建的时候申请两次内存,释放的时候也要释放两次。队尾插入,队头删除。