您的位置:首页 > 理论基础 > 数据结构算法

再回首,数据结构——链队列上的其它一些算法

2015-05-28 11:16 323 查看
       最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。
 
      希望这些能提供给初学者一些参考。

//将链队列 q 中的正整数、零和负整数分别存放在两条不同的链队列q1,q2中
//并且q1,q2中的值要求保持原来的顺序。
int Splitting (LinkQueue q, LinkQueue *q1, LinkQueue *q2)
{
while (!QueueEmpty(q))
{
x = DeleteQueue(&q);
if (x > 0)
AddQueue(q1, x);
else
AddQueue(q2, x);
}
}

/*n条循环队列构成一组,用一个数组存放该队列组中每条队列的头指针和尾指针
功能:求i队列的长度 i队列首元素出队列 */

#define MaxSize N
typedef struct
{
ElementType Queue
[MaxSize]; //n条循环队列
int Position
[2]; //循环队列的队首队尾指示器
}GroQueue;

/*求i队列的长度*/
int QueueLength (GroQueue gq, int i)
{
if (i >= n || i < 0)
{
printf("Error!");
return -1;
}
return ((gq.Position[i][1]-gq.Position[i][0]+MaxSize)%MaxSize);
}

/*i队列首元素出队列*/
ElementType DeleteQueue (GroQueue *gq, int i)
{
if (i >= n || i < 0)
{
printf("Error!");
return nil;
}
if (gq->Position[i][0] == gq->Position[i][i]) //队列满
return nil;
else
{
e = gq->Queue[(gq.Position[i][0]+1)%MaxSize];
gq.Position[i][0] = (gq.Position[i][0]+1)%MaxSize;
return e;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构