对于实现这个算法,我们可以从以下几方面入手
(1)length保存有效数据长度
(2)二维数组保存data、prio
(3)优先级高的房在前面
这个算法插入数据时由于会先遍历顺序表找到优先级比要插入的优先级低的插到他前面,因此插入时时间复杂度为O(n)
删除时由于会直接从前面开始删,算法的时间复杂度为O(1)
#pragma once //防止重命名
#define SIZE 10 //对于顺序表,首先假定初始化大小为10
typedef struct sqlist
{
int elem[2][SIZE]; //由于要保存数据data、优先级prio,因此定义为二维数组
int length;
}sqlist,*psqlist;
bool Insert_Queue(psqlist plist,int prio,int data)
{
if(plist->length == SIZE) //顺序表已满
{
return false;
}
int i=0;
for(;i<plist->length;i++)
{
if(prio < plist->elem[1][i]) //优先级高的插入到前面
{
for(int j=plist->length;j>i;j--)
{
plist->elem[0][j] = plist->elem[0][j-1];
plist->elem[1][j] = plist->elem[1][j-1];
}
plist->elem[0][i] = data;
plist->elem[1][i] = prio;
plist->length++;
return true;
}
}
plist->elem[0][i] = data;
plist->elem[1][i] = prio;
plist->length++;
return true;
}
bool Delete_Queue(psqlist plist)
{
if(plist->length == 0)//顺序表为空时无法删除
{
return false;
}
while(plist->length != 0)
{
for(int i=0;i<plist->length-1;i++)
{
plist->elem[0][i] = plist->elem[0][i+1];
plist->elem[1][i] = plist->elem[1][i+1];
}
plist->length--;
}
return true;
}