数据结构的题,怎么做?

如题所述

/* ------函数结果状态代码------ */
#define TRUE          1
#define FALSE         0
#define OK            1
#define ERROR         0
#define INFEASIBLE    -1
#define OVERFLOW      -2
typedef int Status;           //函数结果状态类型
typedef int SElemType;        //顺序栈中元素的数据类型
typedef int QElemType;        //队列中元素的数据类型
/* ------顺序栈结构类型定义------ */
typedef struct
{
 SElemType * base;            //栈底指针
 SElemType * top;             //栈顶指针
 int stacksize;               //当前以分配的存储空间
}SqStack;  
/* ------链式队列存储结构类型定义------ */
typedef struct QNode
{
 QElemType data;              //队列数据元素
 struct QNode  * next;        //队列指针
}QNode,* QueuePtr;               //链式队列结构类型
typedef struct
{
 QueuePtr front;              //队头指针
 QueuePtr rear;               //队尾指针
}LinkQueue;  

Status DeleteStack_Sq(SqStack &S, int i, SElemType &e)
{  //将将顺序栈S中第i个位置的元素删除,并返回删除元素e
 SElemType *p, *q;                 //位置指针
 if (i<1 || i>StackLength_Sq(S))   //删除位置不合理,返回错误
  return ERROR;
 p = S.base + i - 1;        //指向删除元素位置 
 e = *p;                    //返回删除位置元素                   
 q = S.top  - 1;            //指向栈顶元素位置
 for (++p; p <= q; ++p)
  *(p - 1) = *p;         //将删除元素位置后的元素依次前移一个位置
 return OK;
} //DeleteStack_Sq

Status DeleteQueue_L(LinkQueue &Q, int i, QElemType &e)
{   //将将链式队列Q中第i个位置的元素删除,并返回删除元素e
 int j;
 QueuePtr p, q;
 if (Q.front == Q.rear)               //队列为空
  return ERROR;
 p = Q.front;                        //从队头指针开始查找
 for (j = 0; (p->next!= Q.rear) && j < i - 1; j++)  //判断指针是否为空和是否满足查找位置
  p = p->next;                    //寻找第i-1个结点
 if (!p->next || j > i - 1)          //删除位置不合理
  return ERROR;
 q = p->next;                        //保存第i个位置的指针
 p->next = q->next;                  //修改指针域,跳过第i个结点
 if (Q.rear == p)
  Q.rear = Q.front;
 e = q->data;                        //返回数据
 free(q);                            //释放结点                        
 return OK;
}  //DeleteQueue_L

温馨提示:答案为网友推荐,仅供参考
相似回答