分别用vector数组和链表创建自调整表
-
使用vector数组的算法:
先根据输入的元素动态创建一个vector数组,然后在其中查找元素若找到记录下标,然后删除这个单元
,再新建一个和原数组大小相等的数组,将找到的元素作为新数组的首个元素再将原数组整体拷贝给新数组的除首单元的单元即可 -
使用链表的算法:
先根据输入的元素动态的创建一个链表,然后在其中查找元素,若找到则假设储存的数据与待查找元素相同结点为p,使p的前一个结点指向p的下一个结点,p指向头结点指向的结点,再使头结点指向p即可 -
整体代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef struct Listnode{
int data;
struct Listnode* next;
}Listnode;
void Createvector(vector<int>&);
//功能:根据输入的数据创建vector<int>数组,参数:vector<int>类引用
void Createlist(Listnode*); //根据输入元素动态创建一个链表
void Find(vector<int>&,int); //如果在数组中找到了要查找的元素将其放在首位,其他元素相对位置不变
void Find(Listnode*,int); //类似
int main(void){
vector<int>vi;
Listnode *headnode=new Listnode; //头结点
Listnode *p;
int x;
headnode->next=nullptr;
Createvector(vi);
cout<<"请输入你要查找的元素"<<endl;
cin>>x;
Find(vi,x);
for(int i=0;i<vi.size();i++)cout<<vi[i]<<endl;
Createlist(headnode);
Find(headnode,x);
p=headnode->next;
while(p!=nullptr){
cout<<p->data<<endl;
p=p->next;
}
return 0;
}
void Createvector(vector<int>&vi){
int x;
cout<<"请输入整数,输入其他数据即可停止输入"<<endl;
while(cin>>x){
vi.push_back(x); //将元素存入vector<int>数组中
}
cin.clear(); //恢复输入
cin.ignore();
}
void Createlist(Listnode*head){
int x;
Listnode*r;
cout<<"请输入整数,输入其他数据即可停止输入"<<endl;
while(cin>>x){
Listnode *p=new Listnode;
p->data=x;
p->next=nullptr;
if(head->next==nullptr){
head->next=p;
}else{
r->next=p;
}
r=p;
}
cin.clear();
cin.ignore();
}void Find(vector<int>&vi,int x){
int i=1,temp=0,p=-1,length=vi.size(); //p用来记录查找的元素在数组中的位置
while(vi[i-1]!=x&&i<length){
if(vi[i]==x)p=i;
i++;
}
if(p!=-1){
vector<int>vtemp(length);
vtemp[0]=x; //将x赋给第一个位置
vi.erase(vi.begin()+p); //删除x在数组中的单元
copy(vi.begin(),vi.end(),vtemp.begin()+1);
vi.push_back(0); //恢复原数组被删除的单元
copy(vtemp.begin(),vtemp.end(),vi.begin());
}else
cout<<"no this number"<<endl;
}
void Find(Listnode*head,int x){
Listnode* p=head->next,*s;
while(p->data!=x&&p!=nullptr){
s=p; //保存p的地址
p=p->next; //使p指向p的下一个结点
if(p->data==x){
s->next=p->next; //使原来的p指向它的下一个结点的指针域指向的地址
p->next=head->next;//使原来的p指向的下一个结点指向第一个结点
head->next=p; //使头结点指向p,p成为第一个结点
}
}
}
4.输出示例:
请输入整数,输入其他数据即可停止输入
1
2
3
4
5
6
7
q
请输入你要查找的元素
3
3
1
2
4
5
6
7
请输入整数,输入其他数据即可停止输入
1
2
3
4
5
6
7
q
3
1
2
4
5
6
7