zoukankan
html css js c++ java
顺序队列基本操作
顺序队列基本操作
#include
"
stdafx.h
"
#include
"
stdio.h
"
#include
"
stdlib.h
"
#define
SMALL 1
#if
(SMALL)
#define
MAX 7
int
QueueData[MAX]
=
{
'
A
'
,
'
B
'
,
'
C
'
,
'
D
'
,
'
E
'
,
'
F
'
,
'
G
'
}
;
#else
#define
MAX 14
int
QueueData[MAX]
=
{
'
A
'
,
'
B
'
,
'
C
'
,
'
D
'
,
'
E
'
,
'
F
'
,
'
G
'
,
'
H
'
,
'
I
'
,
'
J
'
,
'
K
'
,
'
L
'
,
'
M
'
,
'
N
'
}
;
#endif
/**/
/*
顺序队列类型定义
*/
typedef
struct
{
int
data[MAX];
int
head;
int
tail;
}
sqQueue;
/**/
/*
链队列类型定义
*/
struct
LinkQueue
{
int
data;
struct
LinkQueue
*
link;
}
;
typedef
struct
LinkQueue lkQueue;
//
-----------------------------------------------------------------------------------------
/**/
/*
顺序队列基本操作函数定义部分
*/
//
顺序队列的初始化函数sqInitialize()
sqQueue
*
sq_Initialize()
{
sqQueue
*
p;
p
=
(sqQueue
*
)malloc(
sizeof
(sqQueue));
if
(p
==
NULL)
{
return
(NULL);
}
else
{
p
->
data[
0
]
=
0
;
p
->
head
=
0
;
p
->
tail
=
0
;
return
(p);
}
}
//
顺序队列的判空函数qIsEmpty()
int
qIsEmpty(sqQueue
*
queue)
{
if
(queue
->
head
==
queue
->
tail)
return
(
1
);
else
return
(
0
);
}
//
顺序队列的判满函数qIsFull()
int
qIsFull(sqQueue
*
queue)
{
if
(queue
->
head
==
MAX)
return
(
1
);
else
return
(
0
);
}
//
顺序队列的入队函数qInQueue()
int
qInQueue(sqQueue
*
queue,
int
data)
{
if
(queue
->
tail
==
MAX)
{
printf(
"
队列已满!\n
"
);
return
(
0
);
}
else
{
queue
->
data[queue
->
tail
++
]
=
data;
return
(
1
);
}
}
//
顺序队列的出队函数qOutQueue()
int
qOutQueue(sqQueue
*
queue,
int
*
p)
{
if
(queue
->
head
==
queue
->
tail)
{
printf(
"
队列已空!\n
"
);
return
(
0
);
}
else
{
*
p
=
queue
->
data[queue
->
head
++
];
return
(
1
);
}
}
//
顺序队列的数据入队操作函数qInputValue()
void
qInputValue(sqQueue
*
queue,
int
array[])
{
int
i
=
0
;
while
(qInQueue(queue,array[i]))
printf(
"
Queue[%d] = %c\t
"
,i,array[i
++
]);
}
//
顺序队列的数据出队操作函数qOutputValue()
void
qOutputValue(sqQueue
*
queue)
{
int
i,QueueData;
i
=
0
;
while
(qOutQueue(queue,
&
QueueData))
printf(
"
Queue[%d] = %c\t
"
,i
++
,QueueData);
printf(
"
\n
"
);
}
//
-----------------------------------------------------------------------------------------
/**/
/*
链式队列基本操作函数定义部分
*/
//
链式队列的初始化函数lk_Initialize()
lkQueue
*
lk_Initialize()
{
lkQueue
*
p;
p
=
(lkQueue
*
)malloc(
sizeof
(lkQueue));
if
(p
==
NULL)
{
return
(NULL);
}
else
{
p
->
data
=
0
;
p
->
link
=
NULL;
return
(p);
}
}
//
链式队列的入队函数lkInQueue()
//
注意:在入队时,参数是队尾指针,返回值也是队尾指针
lkQueue
*
lkInQueue(lkQueue
*
tail,
int
data)
{
lkQueue
*
p;
p
=
(lkQueue
*
)malloc(
sizeof
(lkQueue));
if
(p
==
NULL)
{
printf(
"
新增链式队列元素时内存溢出!\n
"
);
return
(tail);
}
else
{
p
->
data
=
data;
p
->
link
=
tail;
return
(p);
}
}
//
链式队列的出队函数lkInQueue()
//
注意:在出队时,参数是队首指针,返回值也是队首指针
lkQueue
*
lkOutQueue(lkQueue
*
head,
int
*
data)
{
*
p
=
head
->
data;
lkQueue
*
p;
p
=
(lkQueue
*
)malloc(
sizeof
(lkQueue));
if
(p
==
NULL)
{
printf(
"
创建链式队列时内存溢出!\n
"
);
return
(tail);
}
else
{
p
->
data
=
data;
p
->
link
=
tail;
return
(p);
}
}
//
-----------------------------------------------------------------------------------------
int
main(
int
argc,
char
*
argv[])
{
sqQueue
*
queue1;
lkQueue
**
lkHead,
**
lkTail;
queue1
=
sq_Initialize();
if
(queue1
==
NULL)
{
printf(
"
创建顺序队列时内存溢出!\n
"
);
return
0
;
}
else
{
printf(
"
\n顺序队列[入队]数据
\n
"
);
qInputValue(queue1,QueueData);
printf(
"
\n顺序队列[出队]数据
\n
"
);
qOutputValue(queue1);
}
printf(
"
\n运行完毕!\n
"
);
return
0
;
}
查看全文
相关阅读:
PS转换图片——我教你
通过Ajax——异步获取相关问题解答
Spring的线程安全
Spring MVC的工作机制
Annotation的语法和使用
Spring Bean的生命周期
浅谈Spring
Spring的事务管理
行为型模式
结构型模式
原文地址:https://www.cnblogs.com/powersun/p/972020.html
最新文章
Confluence 6 如何保持我空间的整洁
Confluence 6 应该如何在我的空间中组织内容
Confluence 6 给一个从 Jira Service Desk 的非许可证用户访问权限
linux的目录结构
linux简单了解
数据库中的触发器
oracle数据库中的存储函数
oracle数据库中的存储过程
数据库中的例外(异常)
oracle数据库中的游标
热门文章
oracle PL/SQL编程基础知识
oracle数据的导入导出(两种方法三种方式)
数据库中的索引以及索引的底层实现原理(平衡二叉树)
T4模板在项目中的使用
网站收集ing....
linq和EF查询的用法和区分
序列化类型为“System.Data.Entity.DynamicProxies.ActionInfo_”的对象时检测到循环引用。
Memcached——非关系型数据库分布式处理
动态生成表格制作
'UserInfoBLL' node cannot be resolved for the specified context [MVC展示数据.Controllers.LoginController]问题解决
Copyright © 2011-2022 走看看