用数组实现链表(C++)

链表可以说是最基本的数据结构,在常见的笔试,面试可能都会有涉及,本文是用数组来实现链表。
其代码实现如下
#include<iostream>
using namespace std;
class List{
private:
int maxSize;
int n;
int *list;
public:
List(int max);
~List(){delete []list;}
bool isEmpty(){return n==0;}
int length(){return n;}
int locate(int &x);//返回表中元素x的位置
bool retrieve(int k, int &x);//返回表中位置k,将之放入元素x
List& insert(int k,int x);//在位置k插入元素x
List& Delete(int k,int &x);//删除位置k的元素,将之存在x中]
void printList();
};

List::List(int max){
maxSize = max;
n = 0;
list = new int[maxSize];
}

int List::locate(int &x){
for(int i=0;i<n;i++)
if(list[i]==x) return i;
return -1;
}

bool List::retrieve(int k, int &x){
if(k<1||k>n) return false;
x = list[k];
return true;
}

List& List::insert(int k, int x){
//if(k<0||k>n) 此处应抛出异常
//if(n==maxSize) 此处应抛出异常
for(int i = n-1; i >= k; i++)
list[i+1] = list[i];
list[k] = x;
n++;
return *this;
}

List& List::Delete(int k, int &x){
if(retrieve(k, x)){
for(int i = k; i < n; i++)
list[i] = list[i+1];
n--;
return *this;
}
//else 在此抛出异常
}

void List::printList() {
for(int i=0; i < n; i++)
cout<<list[i]<<" ";
cout<<endl;
}

int main() {
List list(10);
list.insert(0,1);
list.insert(1,2);
list.insert(2,3);
int listLength = list.length();
list.printList();
cout<<"数组链表的长度为"<<listLength<<endl;
int delElement = 0;
list.Delete(1, delElement);
list.printList();
cout<<"删除元素后数组链表的长度为"<<list.length()<<" "
<<"删除的元素是"<<" "<<delElement<<endl;
return 0;
}
由于该算法相对简单,只是在某些部分进行简单注释。
用数组来实现链表的效率不是很高,如在进行插入和删除时至多需要移动n个元素,效率为O(n)。
明后天的博客内容为一笔画问题(即欧拉回路的算法),欢迎各位到时捧场。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值