/* ------函数结果状态代码------ */
#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
温馨提示:答案为网友推荐,仅供参考