• 大小: 48KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: 其他
  • 标签:

资源简介

这是一个关于渡口调度管理的数据结构实验代码,主要队列和栈的应用。

资源截图

代码片段和文件信息

 #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


评论

共有 条评论

相关资源