线性表中各结点的检索概率不等时,可用如下策略提高顺序检索的效率:
若找到指定的结点,则将该结点和其前驱结点(若存在)交换,使得经常被检索
的结点尽量位于表的前端。试设计在顺序结构的线性表上实现上述策略的顺序检索算法。
/*线性表中各结点的检索概率不等时,可用如下策略提高顺序检索的效率:
若找到指定的结点,则将该结点和其前驱结点(若存在)交换,使得经常被检索
的结点尽量位于表的前端。试设计在顺序结构的线性表上实现上述策略的顺序检索算法。*/
#include <iostream>
using namespace std;
typedef int ElemType;
#define Maxsize 100
#define OK 1
#define ERROR 0
typedef struct SqList
{
ElemType data[Maxsize];
int length;
}SqList;
void Init_SqList(SqList& L)
{
L.length = 0;
}
void put_front(SqList& L, int k)
{
int temp = 0;
if (L.data[0] == k)
{
cout << "元素已经找到,且元素位于第一个,前面无数据!!!"<<endl;
}
else
{
for (int i = 1; i < L.length; i++)
{
if (L.data[i] == k)
{
temp = L.data[i-1];
L.data[i - 1] = L.data[i];
L.data[i] = temp;
cout << "元素已经找到" << endl;
return; //找到直接结束
}
}
}
}
// 0 1 2 3 4 5 6
//12 25 56 4 78 9 100
int main(void)
{
SqList L;
Init_SqList(L);
L.data[0] = 12;
L.data[1] = 25;
L.data[2] = 56;
L.data[3] = 4;
L.data[4] = 78;
L.data[5] = 9;
L.data[6] = 100;
L.length = 7;
cout << "初始化顺序表" << endl;
for (int i = 0; i < L.length; i++)
cout << L.data[i]<<" ";
cout << endl; //换行
cout << "请输入需要查找的数据" << endl;
int k = 0;
cin >> k;
put_front(L, k);
cout << "交换后顺序表" << endl;
for (int i = 0; i < L.length; i++)
cout << L.data[i] << " ";
cout << endl; //换行
return 0;
}