vs2010网站制作教程,百度搜索引擎入口,电脑租赁平台哪个好,有没有专门做名片的网站多清澈这天空 晴雨相拥 同心逐梦#xff01;
坚守我信心 一路出众#xff01;#xff01;
首先#xff0c;按照惯例#xff0c;欢迎大家边听歌边观看本博客
▶ 紫荆花盛开 (163.com)#xff08;建议复制链接#xff0c;浏览器打开#xff0c;csdn打开太慢了#x…多清澈这天空 晴雨相拥 同心逐梦
坚守我信心 一路出众
首先按照惯例欢迎大家边听歌边观看本博客
▶ 紫荆花盛开 (163.com)建议复制链接浏览器打开csdn打开太慢了
2022香港回归祖国25周年主题歌曲好听
一.单链表
首先 大家肯定知道链表的表达方式如下
typedef struct LNode
{ElemType data;struct LNode *next;}LinkNode;
定义一个LNodenode节点结点L是link表示链接所以叫做LNode链接结点构成链表
第一个存放元素的信息链表的特点就是多存了一个节点指针域指向后继节点。
0.1稍微浅浅的给大家补充一下结构体的知识点
1.一个正常的结构体代码编写
struct
{
int num;
char name[20];
char sex;
float score;
}boy1,boy2;
你可以直接在boy2后面打个{ }初始化在使用boy的时候我们可以具体到一个成员如boy1.num 即为boy1结构体的num成员
然后接下来其实更加常见的定义是这样子的
struct stu
{
int num;
char name[20];
char sex;
float score;
}*boy1,boy2; //boy1是结构体指针,boy2是结构体
这时候我们对指向结构体的指针标表示的成员方式有所不同可表示为(*boy1).num或者boy1-num熟悉吧这里算是补充一下知识点都可以。一般配合malloc与free或者c中的newdelete函数使用主要是结构体指针自创立开始指向的空间就不存在所以我们得开辟一个空间给他们.
1.1理解一些易混概念 本来吧其实我真想按课本讲一遍但是感觉有点浪费时间而且课本那些加深不了我的理解所以干脆我就直接把我的理解说了如果有错希望各位大佬指正
温馨提示接下来的话可能有点绕口令
第一节结点
我们知道一个节点包括了他的数据域和他的指针域
数据域存放他的data指针域存放下一个节点的地址其中在第一个的叫做头结点头结点链接的第一个节点叫做首节点最后一个节点叫做尾结点。经常会出现R指针我管他叫标记指针用于记住我们要操作的节点的下一个地址免得链表丢失至少现在我知道的就是这点其中^表示NULL。
ok接下来来解决几个知识保证我们看得到接下来的代码懂了应该就会写了吧
1.对指针赋值相当于就是让指针指向哪里
1.1比如Lode *rL让r指向头结点L。
1.2preppre和p都是指针让pre指向p指向的地址
1.3pp-next p指向下一位详细一点p-next在等号后面表示解引用指的是p指向的结构体的指针域的地址表示这个结构体的下一个地址
1.4r-nextp 这个指的是让r对应的结构体指向p而非指针r指向p此时的r相当于标记指针
1.5s-nextp-nextp-nexts像这种我们就推荐画图理解
1.6pL-next-next表示p指向L的下下指针域而L-next-nextNULL则指的是L的下一个节点的指针域为空,如下图所示 2.链表的基本功能
相信大家已经对链表有了初步的了解现在我们来一个一个实现他们
2.1链表创建与初始化
typedef char ch
typedef struct LNode
{ch data;struct LNode* next;
}Linknode;
初始化
void InitLnode(LinkNode *L){
Lnew LinkNode;
L-nextNULL;
} 2.2插入
这里就不得不讲讲插入的两种方法
2.2.1头插法
思路示意图如下
LinkList Headinster(LinkList L,int n){LNode *s;int x1;L (LinkList)malloc(sizeof(LNode));L-datax;L-nextNULL;while(x!n){s(LNode*) malloc(sizeof(LNode));s-datax;s-nextL;Ls;x;}return L;
}核心代码
s-nextL-next; ①
L-nexts; ② 作用效果就是从头结点和首节点插入新的元素从而导致先插进来的反而在后面
这里借用一下大佬的动图侵权删 2.2.2尾插法
顾名思义就是从尾部开始插入由于新的节点插入后成为新的尾部所以我们需要用一个指针R去更新尾部节点始终指向尾部 大概像这样子
LinkList TailInster(LinkList L,int n){int x1;L (LinkList)malloc(sizeof(LNode));LNode *s,*rL;while(x!n){s(LNode*) malloc(sizeof(LNode));s-datax;r-nexts;rs;x;}r-nextNULL;return L;
}核心代码
r-nexts; //①r的指针域指向S让新结点插入到链表
rs; //②r指针指向s保持r指针一直在链表尾端方便插入新的结点那么 现在我们继续写这个尾插法
//插入使用尾插法
void InsertLnode(LinkNode *L,ch a[],int n)
{LinkNode *s,*r;rL;for(int i0;in;i){snew LinkNodes-nexta[i];r-nexts;rs;} r-nextNULL;
}
2.3链表的展示
void DisplayLinkNode(LinkNode *L)
{LinkNode *pL-next;while(p!NULL){coutp-data ;pp-next;}coutendlendl;
} 2.4链表的长度
int LinkNodeLength(LinkNode *L)
{LinkNode *pL;int n0; while(p-next!NULL)//注意头结点不算我们的链表长度{n;pp-next;}return n;
}
2.5链表中取值
bool Getlink(LinkNode *L,int n,ch e)
{if(n0)return false;LinkNode *pL;int j0;while(jnp!NULL){j;pp-next;}if(pNULL)return false;else{ep-data;return true;}
}
记忆方法创建指针遍历一下判断是否为空否则为可取之值 2.6链表中删除
bool DeleteNode(LinkNode *L,int n,ch e)
{if(n0) return false;LinkNode *pL,q;int j0;while(jn-1p!NULL)//注意删除代码停在删除元素的前面{j;pp-next;}if(pNULL)return false;qp-next;if(qNULL)return falseeq-data;p-nextq-next;delete q;return true; }
记忆方法 建立两个指针遍历到删除元素的前一个用p指向删除元素然后进行交换
2.7新的插入
bool insertnode(LinkNode *L,int i,ch e)
{if(i0)return false;LinkNode *pL,*s;int j0;while(jnp!NULL){j;pp-next;}if(pNULL||p-nextNULL)return false;snew LinkNode;s-datae;s-nextp-next;p-nexts;return true;
}
记忆方法创建一个新节点类似头插法的方式插进去
小作业 #include iostream
using namespace std;
typedef char ch;
typedef struct LNode {ch data;struct LNode*next;//指针域存放下一个节点的地址
} LinkNode;
//初始化
void InitList(LinkNode *L) {L new LinkNode;L-next NULL;
}
//插入尾插法
void Insertlist(LinkNode *L, ch a[], int n) { //传入想插入的数组(1,2,3,4),则此法插完后亦是1,2,34LinkNode *s, *r; //创建两个指针r L; //r指向首节点Lfor (int i 0; i n; i) {s new LinkNode; //创建空间s-data a[i]; //数据存储值得注意的是s是指针r-next s; //r-next表示L的next指针域其实就是赋值将s的地址s本身就是地址赋给L的next域相当于是L--sr s; //然后将r指向s}r-next NULL; //最后r指向末节指针域为NULL
}
//输出
void Displaylist(LinkNode *L) {LinkNode *p L-next; //这里注意一下其实首节点是没有数据的直接指向下一个节点打印while (p ! NULL) {cout p-data ;p p-next;}cout endl endl;
}
//输出长度
int Listlength(LinkNode *L) {int n 0;LinkNode *p L;while (p-next ! NULL) {n;p p-next;}return n;
}
//判断是否为空
bool emptyelem(LinkNode *L) {if (L-next NULL)return false;elsereturn true;
}
//取值
bool Getelem(LinkNode *L, int n, ch e) {if (n 0)return false;LinkNode *p L;int j 0;while (j n p ! NULL) {j;p p-next;}if (p NULL)return false;e p-data;return true;
}
//输出位置
int Locelem(LinkNode *L, ch e) {LinkNode *p L-next;int j 1;while (p ! NULL p-data ! e) {p p-next;j;}if (p NULL) {return 0;}return j;
}
//指定位置插入元素
bool insertlist(LinkNode *L, int n, ch q) {if (n 0)return false;int j 0;LinkNode *p L, *s;while (j n - 1 p ! NULL) {j;p p-next;}if (pNULL||p-next NULL)return false;else {s new LinkNode;s-data q;s-next p-next;p-next s;return true;}
}
//删除指定元素
bool Delem(LinkNode *L, int n, ch e) {if (n 0)return false;int j 0;LinkNode *p L, *q;while (j n - 1 p ! NULL) {j;p p-next;}if (p NULL)return false;q p-next;if (q NULL)return false;e q-data;p-next q-next;delete q;return true;
}
//释放
void Destroylist(LinkNode *L) {delete L;
}int main() {LinkNode *L1;InitList(L1);cout 1.初始化单链表成功 endl endl;//插入ch a[10] {a, b, c, d, e};cout 2.依次插入abcde. 尾插法 ;Insertlist(L1, a, 5);cout 插入成功 endl endl;//打印cout 3.当前的单链表为 ;Displaylist(L1);//输出长度int n Listlength(L1);cout 4.当前单链表的长度为 n endl endl;//判断链表是否为空cout 5.当前链表;if (emptyelem(L1))cout 不为空表 endl endl;elsecout 为空表 endl endl;//取值输出元素cout 6.取值操作:; int l;ch e;cout 请输入您要取哪个位置的值;cin l;if (Getelem(L1, l, e))cout 取值成功 单链表第 l 位的元素是 e endl endl;elsecout 取值失败您输入的位置 l 越界 endl endl;//查找cout 7.查找操作;ch find;cout 请输入您要查找的元素 ;cin find;if (Locelem(L1, find) 0)cout 对不起当前单链表中没有您查找的元素 ;elsecout 查找成功您所查找的元素 find 在当前单链表的第 Locelem(L1, find) 位 ;coutendlendl;cout 8.插入操作;int k;ch q;cout 请您输入一个数字和一个字符代表在第几位插入一个字符;cin k;cin q;if (!insertlist(L1, k, q))cout Warning:输入序号越界插入失败 endl;elsecout 插入成功 endl endl;cout 9.当前单链表的元素有;Displaylist(L1);cout 10.删除操作;int y;ch o;cout 请您输入要删除的元素的序号;cin y;if (!Delem(L1, y, o))cout 对不起您的输入的序号有误越界删除失败 endl endl;elsecout 删除成功成功删除第 y 个元素 o endl endl;cout 11.当前单链表的元素有;Displaylist(L1);//释放cout 12.销毁单链表;Destroylist(L1);cout 销毁成功;return 0;
}全部失败的样例9,p8p7 全部成功的样例4c2p6 所以建议大家自己打吧看完上面的写这个代码就很轻松
感谢您今天的捧场敬请期待下次演出。 See you next illusion.