`
dlzjp123
  • 浏览: 23801 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

用数组实现链表(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
0
分享到:
评论

相关推荐

    C++——数组模拟链表

    C++中的链表是数据结构中非常重要的一部分,而在链表中,我们可以使用数组来模拟链表的结构。今天,我们将讨论如何使用数组来模拟链表,并实现链表的插入和遍历操作。 首先,我们需要了解链表的基本结构。链表是一...

    数据结构动态数组实现链表

    在C++中,通常使用`std::vector`来实现动态数组;在Python中,内置的列表就是动态数组。 动态数组实现链表的核心思想是利用动态数组的特性来模拟链表的行为。下面我们将详细讨论这个实现过程: 1. **节点表示**:...

    队列的链表与数组分别实现

    本篇文章将深入探讨如何用数组和链表两种数据结构来实现队列。 ### 数组实现队列 数组实现队列的优势在于访问速度快,因为数组是连续存储的,可以通过下标直接访问元素。但数组的大小是固定的,所以在创建时需要...

    约瑟夫环问题(数组实现,链表实现

    约瑟夫环问题,也被称为...无论是数组还是链表实现,都需要对数据结构有深入的理解,并能够根据问题特点灵活选择合适的方法。在实际应用中,我们可以根据问题规模、内存限制以及计算性能要求,来决定采用哪种实现方式。

    数组和链表的区别 数组和链表.pdf

    在 C++ 语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小。而在实际应用中,用户使用数组之前有时无法确定数组的大小,只能将数组定义成足够大的,...

    数据结构:数组和链表的区别以及各自的优缺点 数组和链表.pdf

    在C++语言中,可以用数组处理一组数据类型相似,或者用链表实现动态申请内存空间,根据需求选择合适的数据结构。 数组和链表是两种不同的数据结构形式,每种形式都有其优缺点,选择合适的数据结构是非常重要的。...

    C++循环队列模版(数组和链表两种实现方式都有)

    在C++中,循环队列可以使用数组或者链表来实现,这两种方式各有优缺点。下面我们将详细探讨这两种实现方式及其基本功能。 首先,我们来看数组实现的循环队列。数组是最基础的数据结构,它的优点是访问速度快,空间...

    动态数组和链表

    老师上课做的ppt,个人觉得挺详细的。动态数组和链表感觉有点难!

    链表和数组的区别在哪里? 数组和链表.pdf

    在计算机科学中,数据结构是组织和存储数据的方式,它...在实际编程中,我们还可以结合数组和链表的优点,例如使用动态数组(如C++的std::vector)或者双向链表(如C++的std::list)等复合数据结构,以满足复杂的需求。

    数组、单链表和双链表介绍以及双向链表的CC++Java实现 数组和链表.pdf

    数组、单链表和双链表介绍以及双向链表的C、C++和Java实现 在计算机科学中,数组、单链表和双链表是最基本的数据结构。它们都是线性表的实现方式,具有相同类型的n(n≥0)个数据元素组成的有限序列。 数组 数组是...

    C链表实现 C++类实现 C数组实现 约瑟夫环

    分别用 C++类实现 C链表实现 C数组实现 如有不清楚的地方欢迎 加QQ309669771 一起学习

    解读C++中数组和链表的优缺点及示例代码

    解读C++中数组和链表的优缺点及示例代码

    数据结构--数组、单链表和双链表介绍以及双向链表 数组和链表.pdf

    动态数组是指数组的容量能动态增长的数组,C语言需要手动实现,而C++的STL提供了Vector。 二、单链表 单链表是一种链表的变种,由节点组成,每个节点都包含下一个节点的指针。单链表的特点是: * 节点的链接方向...

    线性表的多种实现(如:数组,向量,链表)

    在实际应用中,线性表的实现方式多种多样,常见的有数组、可扩展数组、向量和链表。下面将详细讨论这些实现方式。 1. **定长数组实现** 定长数组是最简单的线性表实现方式,它预先分配了一段连续的内存空间,存储...

    多方式画SIN曲线(数组,链表,数据库,堆栈等)

    本主题探讨了多种方法来实现这一目标,包括使用数组、链表、数据库和堆栈等数据结构。这些不同的方法展示了如何利用各种编程技巧来解决同一个问题。 首先,数组是最基础的数据结构之一,它在内存中连续存储元素。在...

    如何给链表数组赋值.rar_如何 链表 数组 赋值_链表_链表数组赋值_链表赋值

    假设我们有一个大小为N的链表数组,可以先用NULL(或者nullptr在C++11及以后的版本中)初始化数组,然后根据需求逐个插入链表: ```cpp ListNode* listArray[N] = {NULL}; // 初始化为空链表 ``` 4. **给链表...

    数据结构 线性表和链表 c++实现

    顺序存储通常使用数组实现,称为顺序表(SqList),而链式存储则通过指针连接元素,称为链表(LinkList)。 1. **顺序表(SqList)**: 顺序表在内存中连续分配空间,每个元素都有固定的索引位置。它的优点是访问速度...

    约瑟夫问题 c++数组实现

    该程序用c++编写。约瑟夫问题可以用指针链表实现也可以用数组实现。这里提供一个用数组实现的,链表的可参考该算法实现

    使用C++实现相关算法及其数据结构源码

    使用C++实现相关算法及其数据结构源码 List:线性表实现 数组实现 链表实现 StackAndQueue: 栈和队列实现 数组实现 链表实现 String: 串实现 数组实现 KMP算法 BinTree: 二叉树实现 数组实现 先序遍历 中序遍历 ...

Global site tag (gtag.js) - Google Analytics