利用顺序表实现优先队列的插入和删除操作

对于实现这个算法,我们可以从以下几方面入手

(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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值