线性表中各结点的检索概率不等时,可用如下策略提高顺序检索的效率:
若找到指定的结点,则将该结点和其前驱结点(若存在)交换,使得经常被检索
的结点尽量位于表的前端。试设计在顺序结构的线性表上实现上述策略的顺序检索算法。
/*线性表中各结点的检索概率不等时,可用如下策略提高顺序检索的效率:
若找到指定的结点,则将该结点和其前驱结点(若存在)交换,使得经常被检索
的结点尽量位于表的前端。试设计在顺序结构的线性表上实现上述策略的顺序检索算法。*/#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;
}