数据结构和算法 以及leetcode整理

第一部分:线性表的学习001
 线性表包括数组和链表两种,数组是采用连续的存储空间,数组具有随机存储的特性,什么是随机存储特性,也就是说num[i] 的时间复杂度是O(1),数组的缺点在于:在头部插入时 时间复杂度为O(n),头部删除时时间复杂度为O(n).插入删除的平均时间复杂度为O(n-1/2). 数组是连续的而存储空间,所以存储空间是固定的,遇到存储空间不足的时候需要扩充存储空间,比较麻烦。
 C++中数组是一种基本数据结构  int array[], vector<int>等来表示数组 vector是封装好的数组,最常使用leetcode中关于数组的题是在是太多了,在下面的章节的内容中会对数组部分的题型进行归纳;(数组解决问题的方法比较相似)
 
 为了克服数组连续存储的弊端,可以采用链表等来表示线性存储结构,链表由数据域和指针域构成,所以实现的时候使用类或者是结构体来表示。(单链表)
struct ListNode{
int data;
ListNode *next;
}

链表不具有随机存储特性,链表的优势在于1)不用考虑内存的大小 2)增加数据或者删除数据的时间复杂度为O(1), 链表的构建分为头插法:
ListNode *head;
head->next=NULL;
ListNode *p=new ListNode(-1);
p->next=head->next;
head->next=p;
当然也可以是尾插法建表:
ListNode *head;
head->next=NULL;
ListNode *p=new ListNode(-1);
ListNode *tail;
tail->next=p;
tail=tail->next;
链表比较常用的是增加和删除,下面是单链表的p结点后面添加s结点的通用代码
s->next=p->next;
p->next=s;
删除结点的通用代码(首先需要找到删除结点的前一个结点)
ListNode *p=s->next;
s->next=s->next->next;
delete p;

leetcode中关于链表的体也有不少,将在后面的章节中继续介绍,主要的关键点是链表的边界条件比较复杂;






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值