ListInsert(L,5,7);
int e = -1;//用变量e吧删除的元素带回来
if(ListDelete(L,1,e))
cout << “已经删除第三个元素,删除的元素值是:” << e << endl;
else
cout << “位序i不合法,删除失败” << endl;
for(int i = 0; i < L.length; i++){
cout << i << " " << L.data[i] << endl;
}
cout << “按位查找:” << endl;
cout << GetElem(L,3) << endl;
cout << “按值查找:” << endl;
cout << LocateElem(L,6) << endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
//初始化一个空的单链表
bool InitList(LinkList &L){
L = NULL;//空表 暂时还没有任何节点
return true;
}
//在第i个位置插入元素e(带头结点)
bool ListInsert(LinkList &L, int i, int e){
if(i < 1)
return false;
LNode *p;//指针P指向当前扫描到的节点
int j = 0;//当前p指向的是第几个结点
p = L;//L指向头结点,头结点是第0个结点(不存数据)
while(p != NULL && j < i - 1){
p = p->next;
j++;
}
if(p == NULL)
return false;
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;//将结点s连接到o之后
return true;//插入成功
}
//不带头结点
bool ListInsert1(LinkList &L, int i, int e){
if(i < 1)
return false;
if(i == 1)
{
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = L;
L = s;
return true;
}
LNode *p;
int j = 1;//当前p指向的第几个结点
p = L;
while(p!=NULL && j < i - 1){
p = p->next;
j++;
}
if(p == NULL)
return false;
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
//后插操作:在P结点之后插入e
bool InsertNextNode(LNode *p, int e){
if(p == NULL)
return false;
LNode *s = (LNode *)malloc(sizeof(LNode));
if(s == NULL)
return false;
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
//前插操作:在p结点之前插入元素e
bool InsertPriorNode(LNode *p, int e){
if(p == NULL)
return false;
LNode *s = (LNode *)malloc(sizeof(LNode));
if(s == NULL)
return false;
s->next = p->next;
p->next = s;
s->data = p->data;//将p中元素复制到s中
p->data = e;
return true;
}
//按位查找,返回第i个元素(带头结点)
LNode * GetElem(LinkList L, int i){
if(i < 0)
return NULL;
LNode *p;
int j = 0;
p = L;
while(p != NULL && j < i){
p = p->next;
j++;
}
return p;
}
//按值查找,找到数据域==e的节点
LNode * LocateElem(LinkList L,int e){
LNode *p = L->next;
while(p != NULL && p->data != e)
p = p->next;
return p;//找到后返回该节点指针,否则返回NULL
}
//求表的长度
int Length(LinkList L){
int len = 0;
LNode *p = L;
while(p->next != NULL)
{
p = p->next;
len++;
}
return len;
}
bool ListDelete(LinkList &L, int i, int e){
if(i < 1)
return false;
LNode *p;
int j = 0;
p = L;
while(p != NULL &&j < i - 1){
p = p->next;
j++;
}
if(p == NULL)
return false;
if(p->next = NULL)//第i - 1个结点之后已无其他结点
return false;
LNode *q = p->next;//另q结点指向被删除的节点
e = q->data;//用e返回元素的值
p->next = q->next;//将*q结点从链中断开
free(q);
return true;
}
//删除指定结点
bool DeleteNode(LNode *p){
if(p==NULL)
return false;
LNode *q = p->next;
p->data = p->next->data;
p->next = q->next;
free(q);
return true;
}
//后插操作:在p节点之后插入元素e
bool InsertNextNode(LNode *p, int e){
if(p == NULL)
return false;
LNode *s = (LNode *)malloc(sizeof(LNode));
if(s == NULL)
return false;
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
int main(){
return 0;
}
#include
using namespace std;
typedef struct DNode{
int datal
struct DNode *prior, *next;
}DNode, *DLinkList;
bool InitDLinkList(DLinkList &L){
L = (DNode *) malloc(sizeof(DNode));
if(L == NULL)
return false;
L->prior = NULL;
L->next = NULL;
return true;
}
//在p结点之后插入s结点
bool InsertNextDNode(DNode *p, DNode *s){
if(pNULL || sNULL){
return false;
}
s->next = p->next;
if(p->next != NULL){
p->next->prior = s;
}
s->prior = p;
p->next = s;
}
//删除p结点的后继结点
bool DeleteNextDNode(DNode *p){
if(p==NULL) return false;
DNode *q = p->next;
if(q==NULL) return false;
p->next = q->next;
if(q->next !=NULL)
q->next->prior = p;
free(q);
return true;
}
//循环单链表
#include
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode ,*LinkList;
//初始化一个循环单链表
bool InitList(LinkList &L){
L = (LNode *)malloc(sizeof(LNode));
if(L==NULL)
return false;
L->next = L;
return true;
}
//判断循环单链表是否为空
bool Empty(LinkList L){
if(L->next == L)
return true;
else
return false;
}
int main(){
return 0;
}
//循环双链表
#include <bits/stdc++.h>
using namespace std;
typedef struct DNode{
int data;
struct DNode *prior, *next;
}DNode, *DLinkList;
//初始化空的循环双链表
bool InitDLinkList(DLinkList &L){
L = (DNode *)malloc(sizeof(DNode));
if(L == NULL)
return false;
L->prior = L;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/894c6f332e2afe78546a0d1c51d0d263.jpeg)
那么如何才能正确的掌握Redis呢?
为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题
-
并发编程面试题汇总
-
JVM面试题汇总
-
Netty常被问到的那些面试题汇总
-
Tomcat面试题整理汇总
-
Mysql面试题汇总
-
Spring源码深度解析
-
Mybatis常见面试题汇总
-
Nginx那些面试题汇总
-
Zookeeper面试题汇总
-
RabbitMQ常见面试题汇总
JVM常频面试:
Mysql面试题汇总(一)
Mysql面试题汇总(二)
Redis常见面试题汇总(300+题)
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题
-
并发编程面试题汇总
-
JVM面试题汇总
-
Netty常被问到的那些面试题汇总
-
Tomcat面试题整理汇总
-
Mysql面试题汇总
-
Spring源码深度解析
-
Mybatis常见面试题汇总
-
Nginx那些面试题汇总
-
Zookeeper面试题汇总
-
RabbitMQ常见面试题汇总
JVM常频面试:
[外链图片转存中…(img-0dHzj96S-1713714177344)]
Mysql面试题汇总(一)
[外链图片转存中…(img-b3EtHm3G-1713714177344)]
Mysql面试题汇总(二)
[外链图片转存中…(img-SIdMdSO2-1713714177344)]
Redis常见面试题汇总(300+题)
[外链图片转存中…(img-YFnByA2e-1713714177344)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!