单向链表
实现单向链表的操作
- 头文件 queue.h
#ifndef __QUEUE_H__
#define __QUEUE_H__
typedef struct {
int buf[SIZE];
int head; // remember first data
int tail; // remember last data
} queue_t;
void queue_init(queue_t * );
void queue_deinit(queue_t *);
int queue_size(const queue_t *);
int queue_full(const queue_t *);
int queue_empty(const queue_t *);
int push(queue_t * ,int );
int pop(queue_t * , int *);
int top(queue_t *, int *);
#endif
2.queue 源文件
#include "01_queue.h"
void queue_init(queue_t * p_queue)
{
p_queue->head = 0;
p_queue->tail = 0;
}
void queue_deinit(queue_t * p_queue)
{
p_queue->head = 0;
p_queue->tail = 0;
}
int queue_size(const queue_t *p_queue)
{
return p_queue->tail - p_queue->head;
}
int queue_full(const queue_t *p_queue)
{
return p_queue->tail >= SIZE;
}
int queue_empty(const queue_t *p_queue)
{
return p_queue->head == p_queue->tail;
}
int push(queue_t * p_queue,int val)
{
if (queue_full(p_queue))
{
return 0;
}
p_queue->buf[p_queue->tail] = val;
p_queue->tail++;
return 1;
}
int pop(queue_t * p_queue, int *p_val)
{
if(queue_empty(p_queue))
return 0;
*p_val = p_queue->buf[p_queue->head];
p_queue->head++;
return 1;
}
int top(queue_t *p_queue, int *p_val)
{
if(queue_empty(p_queue))
return 0;
*p_val = p_queue->buf[p_queue->head];
return 1;
}
- queue 的主函数
#include<stdio.h>
#include "01_queue.h"
int main()
{
queue_t que = {0};
int p_val = 0;
queue_init(&que);
printf("queue empty result is %d \n", queue_empty(&que));
printf("queue full result is %d \n", queue_full(&que));
printf("queue size result is %d \n", queue_size(&que));
push(&que, 10);
push(&que, 20);
push(&que, 15);
push(&que, 30);
push(&que, 45);
push(&que, 1);
push(&que, 50);
printf("queue empty result is %d \n", queue_empty(&que));
printf("queue full result is %d \n", queue_full(&que));
printf("queue size result is %d \n", queue_size(&que));
top(&que,&p_val);
printf("queue top val is %d \n ",p_val);
while(!queue_empty(&que))
{
pop(&que,&p_val);
printf("%d ", p_val);
}
printf("\n");
queue_deinit(&que);
return 0;
}
gcc -DSIZE=10 01_queue_main.c 01_queue.c