资源简介
这是一个关于渡口调度管理的数据结构实验代码,主要队列和栈的应用。
代码片段和文件信息
#include
#include /* malloc()等 */
#include /* EOF(=^Z 或 F6)NULL */
#include
#include /* atoi() */
#include /* eof() */
#include /* floor()ceil()abs() */
#include /* exit() */
// 函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int Status; // Status是函数的类型其值是函数结果状态代码,如OK等
typedef int SElemType; // 定义栈元素类型为整型
typedef int QElemType; //定义队列元素类型为整型
//----------栈的顺序存储表示----------
#define STACK_INIT_SIZE 10 // 存储空间初始分配量
#define STACK_INCREMENT 2 // 存储空间分配增量
struct SqStack
{
SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
SElemType *top; // 栈顶指针
int stacksize; // 当前已分配的存储空间,以元素为单位
}; // 顺序栈
//----------基本操作的算法描述(部分)----------
Stauts InitStack(SqStack &S)
{ // 构造一个空栈S
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW); // 存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
} //InitStack
Status Push(SqStack &SSElemType e)
{ // 插入元素e为新的栈顶元素
if(S.top-S.base>=S.stacksize) // 栈满,追加存储空间
{
S.base=(SElemType *)realloc(S.base(S.stacksize+STACK_INCREMENT)*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW); // 存储分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACK_INCREMENT;
}
*(S.top)++=e;
} //Push
Status Pop(SqStack &SSElemType &e)
{ // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
} //POp
Status StackEmpty(SqStack S)
{ // 若栈S为空栈,则返回TRUE,否则返回FALSE
if(S.top==S.base)
return TRUE;
else
return FALSE;
} //StackEmpty
//----------单链队列——队列的链式存储结构----------
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode*QueuePtr;
typedef struct
{
QueuePtr front; //对头指针
QueuePtr rear; //队尾指针
}linkQueue;
//----------基本操作的算法描述(部分)----------
Status InitQueue(linkQueue &Q)
{ /* 构造一个空队列 Q */
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
exit(OVERFLOW);
Q.front->next=NULL;
return OK;
}
Status DestroyQueue(linkQueue &Q)
{ /* 销毁队列 Q(无论空否均可) */
while(Q.front)
{
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return OK;
}
Status ClearQueue(linkQueue &Q)
{ /* 将 Q 清为空队列 */
QueuePtr pq;
Q.rear=Q.front;
p=Q.front->next;
Q.front->next=NULL;
while(p)
{
q=p;
p=p->next;
free(q);
}
return OK;
}
Status QueueEmpty(linkQueue Q)
{ /* 若 Q 为空队列则返回 TRUE否则返回 FALSE */
if(Q.front==Q.rear)
return TRUE;
else
return FALSE;
}
int QueueLength(linkQueue Q)
{ /* 求队列的长度 */
int i=0;
QueuePtr p;
p=Q.front;
while(Q.rear!=p)
{
i++;
p=p->next;
}
return i;
}
Status GetHead_Q(linkQueue QQElemType &e)
{ /* 若队列不空则用 e 返回 Q 的队头元素并返回 OK否则返回 ERROR */
QueuePtr p;
if(Q.front==Q.rear)
ret
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 33792 2010-01-09 15:06 渡口调度管理\Debug\vc60.idb
文件 36864 2010-01-09 15:06 渡口调度管理\Debug\vc60.pdb
文件 255840 2010-01-09 15:06 渡口调度管理\Debug\渡口调度管理.pch
文件 4165 2009-10-30 14:33 渡口调度管理\wxz.cpp
文件 4347 2009-10-30 14:35 渡口调度管理\渡口调度管理.dsp
文件 532 2009-10-30 12:43 渡口调度管理\渡口调度管理.dsw
文件 50176 2010-01-09 15:06 渡口调度管理\渡口调度管理.ncb
文件 48640 2010-01-09 15:06 渡口调度管理\渡口调度管理.opt
文件 999 2010-01-09 15:06 渡口调度管理\渡口调度管理.plg
目录 0 2010-01-09 15:06 渡口调度管理\Debug
目录 0 2010-01-09 15:06 渡口调度管理
----------- --------- ---------- ----- ----
435355 11
- 上一篇:弹道仿真软件ballistix
- 下一篇:ArcGIS.txt
评论
共有 条评论