日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自组织线性表

發布時間:2025/4/16 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自组织线性表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

計數:就是將線性表按頻率來排列,頻率高的放在前面,頻率低的放到后面。

移至前端:將每次訪問的元素都放到最前面,之前在它前面的都向后移一位。

轉置:將訪問的元素和前面的一個元素交換位置。

《數據結構和算法分析》(第二版)9.6題。


代碼:

#include<iostream>
using namespace std;
void count(int list[], int array[])
{
int count = 0;
int rate[8];
for (int i = 0; i < 8; i++)
rate[i] = 0;
for (int i = 0; i < 15; i++)
{
for (int j = 0; j < 8; j++)
{
if (array[i] == list[j])
{
count += j + 1;
rate[j]++;
if (rate[j] <= rate[j - 1])
break;
else
{
for (int k = j; k > 0; k--)
{
if (rate[k] > rate[k - 1])
{
int temp = list[k];
list[k] = list[k - 1];
list[k - 1] = temp;
temp = rate[k];
rate[k] = rate[k - 1];
rate[k - 1] = temp;
}
}
break;
}


}
}
}
cout << "訪問的次數:" << count << endl;
cout << "計數后的順序:";
for (int i = 0; i < 8; i++)
{
printf("%c ", (65 + list[i]));
}
cout << endl << endl;;
}
void MoveToStart(int list[], int array[])
{
int count = 0;
for (int i = 0; i < 15; i++)
{
for (int j = 0; j < 8; j++)
{
if (array[i] == list[j])
{
count += j + 1;
if (j == 0)
break;
else
{
int m = list[j];
for (int k = j; k > 0; k--)
{
list[k] = list[k - 1];
}
list[0] = m;
}


}
}
}
cout << "訪問的次數:" << count << endl;
cout << "移至前端的順序:";
for (int i = 0; i < 8; i++)
{
printf("%c ", (65 + list[i]));
}
cout << endl << endl;;


}
void exchange(int list[], int array[])
{
int count = 0;
for (int i = 0; i < 15; i++)
{
int m=array[i];
for (int j = 0; j < 8; j++)
{
int n=list[j];
if (array[i] == list[j])
{
count += j + 1;
if (j == 0)
break;
else
{
int temp = list[j-1];
list[j - 1] = list[j];
list[j] = temp;
break;
}


}
}
}
cout << "訪問的次數:" << count << endl;
cout << "轉置后的順序:";
for (int i = 0; i < 8; i++)
{

printf("%c ", (65 + list[i]));
}
cout << endl << endl;;
}
int main()
{
int list[8];
for (int i = 0; i < 8; i++)
list[i] = i;
int array[15] = { 3,7,7,6,7,4,6,7,6,7,4,2,4,7,6 };
exchange(list, array);
for (int i = 0; i < 8; i++)
list[i] = i;
MoveToStart(list, array);
for (int i = 0; i < 8; i++)
list[i] = i;
count(list, array);
}

實現:

總結

以上是生活随笔為你收集整理的自组织线性表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。