17.10.1
void resize_stack(size_t size)
{
assert(stack != NULL);
stack_size = size;
realloc(stack, sizeof(STACK_TYPE) * size);
assert(stack != NULL);
}
17.10.2
接口
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define QUEUE_TYPE int
typedef struct _queue
{
int front;
int rear;
int full;
int present;
QUEUE_TYPE * ar;
}Queue;
void create_queue(size_t size);
void destroy_queue(void);
void insert(QUEUE_TYPE value);
void deletes(void);
QUEUE_TYPE first(void);
int is_full(void);
int is_empty(void);
void resize_queue(size_t size);
和静态差不多
#include "queue.h"
static Queue * queue;
void create_queue(size_t size)
{
queue = (Queue *)malloc(sizeof(Queue));
queue->ar = (QUEUE_TYPE *)malloc(sizeof(QUEUE_TYPE) * size);
if(!queue || !queue->ar)
return;
queue->full = size;
queue->rear = 0;
queue->front = 1;
queue->present = 0;
}
void destroy_queue(void)
{
if(queue->ar)
free(queue->ar);
if(queue)
free(queue);
}
void insert(QUEUE_TYPE value)
{
if(is_full())
return;
else
{
if(queue->rear++ == queue->full)
queue->rear = 0;
queue->ar[queue->rear] = value;
queue->present++;
}
}
void deletes(void)
{
if(is_empty())
return;
else
{
if(queue->front++ == queue->full)
queue->front = 0;
queue->present--;
}
}
QUEUE_TYPE first(void)
{
if(is_empty())
return 0;
else
return queue->ar[queue->front];
}
int is_full(void)
{
return queue->present == queue->full;
}
int is_empty(void)
{
return queue->present == 0;
}
void resize_queue(size_t size)
{
if(queue->ar)
{
realloc(queue->ar, size);
if(queue->ar)
queue->full = size;
}
return;
}
17.10.3
接口
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define QUEUE_TYPE int
typedef struct _queue
{
QUEUE_TYPE ar;
struct _queue * n;
}Queue;
typedef struct
{
QUEUE_TYPE sum;
Queue * front;
Queue