数据结构 c语言实现顺序队列(输数字入队,字符出队)
2017-07-29 13:57
851 查看
一.头文件seqqueue.h实现
#ifndef __SEQQUEUE_H__
#define __SEQQUEUE_H__
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define MAXSIZE 64
typedef int datatype;
typedef struct seqqueue
{
datatype data[MAXSIZE];
int front,rear;
}seq_queue,*seq_pqueue;
extern void init_seqqueue(seq_pqueue *Q);
extern bool is_full_seqqueue(seq_pqueue q);
extern bool in_seqqueue(datatype data,seq_pqueue q);
extern bool is_empty_seqqueue(seq_pqueue q);
extern bool out_seqqueue(seq_pqueue q,datatype *D);
extern void show_seqqueue(seq_pqueue q);
#endif
二函数实现seqqueue.c
#include"seqqueue.h"
void init_seqqueue(seq_pqueue *Q)
{
*Q = (seq_pqueue)malloc(sizeof(seq_queue));
if(NULL == (*Q))
{
perror("malloc");
exit(-1);
}
(*Q) -> front = (*Q)->rear = MAXSIZE - 1;
}
bool is_full_seqqueue(seq_pqueue q)
{
if((q->rear +1)%MAXSIZE == q->front)
return true;
else
return false;
}
bool in_seqqueue(datatype data,seq_pqueue q)
{
if(is_full_seqqueue(q))
{
printf("queue is full");
return false;
}
q->rear = (q->rear+1)%MAXSIZE;
q->data[q->rear] = data;
return true;
}
bool is_empty_seqqueue(seq_pqueue q)
{
if(q->rear == q->front)
return true;
else
return false;
}
bool out_seqqueue(seq_pqueue q,datatype *D)
{
if(is_empty_seqqueue(q))
{
printf("is empty\n");
return false;
}
q->front = (q->front+1)%MAXSIZE;
*D = q->data[q->front];
return true;
}
void show_seqqueue(seq_pqueue q)
{
int i;
if(is_empty_seqqueue(q))
{
return;
}
for(i = (q->front+1)%MAXSIZE;i != (q->rear+1)%MAXSIZE ;i=(i+1)%MAXSIZE)
{
printf("%d\t",q->data[i]);
}
puts("");
}
三.test.c包含主函数
#include"seqqueue.h"
int main()
{
seq_pqueue q;
datatype data,t;
int ret;
init_seqqueue(&q);
while(1)
{
printf("puts num\n");
ret = scanf("%d",&data);
if(ret == 1)
{
if(in_seqqueue(data,q))
{
show_seqqueue(q);
}
}
else
{
if(out_seqqueue(q,&t))
{
printf("out : %d\n",t);
show_seqqueue(q);
}
}
//清空输入缓冲区
while(getchar() != '\n');
}
return 0;
}
四.makefile文件实现
CC = gcc
CFLAGS = -Wall -g -O0
SRC = seqqueue.c test.c
OBJS = test
$(OBJS): $(SRC)
$(CC) $(CFLAGS) -o $@ $^
clean:
$(RM) $(OBJS) .*.sw?
#ifndef __SEQQUEUE_H__
#define __SEQQUEUE_H__
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define MAXSIZE 64
typedef int datatype;
typedef struct seqqueue
{
datatype data[MAXSIZE];
int front,rear;
}seq_queue,*seq_pqueue;
extern void init_seqqueue(seq_pqueue *Q);
extern bool is_full_seqqueue(seq_pqueue q);
extern bool in_seqqueue(datatype data,seq_pqueue q);
extern bool is_empty_seqqueue(seq_pqueue q);
extern bool out_seqqueue(seq_pqueue q,datatype *D);
extern void show_seqqueue(seq_pqueue q);
#endif
二函数实现seqqueue.c
#include"seqqueue.h"
void init_seqqueue(seq_pqueue *Q)
{
*Q = (seq_pqueue)malloc(sizeof(seq_queue));
if(NULL == (*Q))
{
perror("malloc");
exit(-1);
}
(*Q) -> front = (*Q)->rear = MAXSIZE - 1;
}
bool is_full_seqqueue(seq_pqueue q)
{
if((q->rear +1)%MAXSIZE == q->front)
return true;
else
return false;
}
bool in_seqqueue(datatype data,seq_pqueue q)
{
if(is_full_seqqueue(q))
{
printf("queue is full");
return false;
}
q->rear = (q->rear+1)%MAXSIZE;
q->data[q->rear] = data;
return true;
}
bool is_empty_seqqueue(seq_pqueue q)
{
if(q->rear == q->front)
return true;
else
return false;
}
bool out_seqqueue(seq_pqueue q,datatype *D)
{
if(is_empty_seqqueue(q))
{
printf("is empty\n");
return false;
}
q->front = (q->front+1)%MAXSIZE;
*D = q->data[q->front];
return true;
}
void show_seqqueue(seq_pqueue q)
{
int i;
if(is_empty_seqqueue(q))
{
return;
}
for(i = (q->front+1)%MAXSIZE;i != (q->rear+1)%MAXSIZE ;i=(i+1)%MAXSIZE)
{
printf("%d\t",q->data[i]);
}
puts("");
}
三.test.c包含主函数
#include"seqqueue.h"
int main()
{
seq_pqueue q;
datatype data,t;
int ret;
init_seqqueue(&q);
while(1)
{
printf("puts num\n");
ret = scanf("%d",&data);
if(ret == 1)
{
if(in_seqqueue(data,q))
{
show_seqqueue(q);
}
}
else
{
if(out_seqqueue(q,&t))
{
printf("out : %d\n",t);
show_seqqueue(q);
}
}
//清空输入缓冲区
while(getchar() != '\n');
}
return 0;
}
四.makefile文件实现
CC = gcc
CFLAGS = -Wall -g -O0
SRC = seqqueue.c test.c
OBJS = test
$(OBJS): $(SRC)
$(CC) $(CFLAGS) -o $@ $^
clean:
$(RM) $(OBJS) .*.sw?
相关文章推荐
- 数据结构 c语言实现链式循环队列(输入数字入队 输入字母出队)
- C语言实现顺序队列的初始化、入队、出队等操作(三)
- (C语言队列的顺序实现(数据结构十)
- C语言实现循环队列基本操作(初始化、判断队空、入队、出队)
- (C语言队列的顺序实现(数据结构十)
- C语言数据结构-顺序队列-数组实现
- 剑指offer 01-06解答思路以及代码(顺序数组找特定数字,替换空格字符,链表反转输出,重建二叉树,两个栈实现队列效果,旋转数组最小元素)
- c语言:用双向链表实现双端队列(队列两端都可以进行入队出队操作)
- 采用顺序存储实现循环队列的初始化、入队、出队操作。
- 编程实现顺序队列的入队操作和出队操作,并将出队结果输出
- C语言--实现队列的入队出队
- 数据结构C语言实现之链式队列的6种算法代码
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构(6) 顺序队列 c++ 模板实现
- 【数据结构】C语言实现顺序表(静态顺序表)
- 数据结构|顺序队列的实现(实验3.3)
- 顺序队列的创建、初始化、判断空、入队、出队、读取队头元素、置空、求队长操作
- 编程实现队列入队出队操作
- 顺序循环队列的c语言实现
- 数据结构:循环队列(C语言实现)