当前位置: 首页 > news >正文

备案的时候网站名称长春网站seo

备案的时候网站名称,长春网站seo,网站设置时间段访问,河南建设监理协会网站电话目录 一. 单链表的特点 1.1 解引用拓展 🤖 二. 单链表的操作 2.1不带头节点的操作 2.1.1 打印 2.1.1.1 创建结点 2.1.2 尾插(需要二级指针) 注意形参的值不改变实参:(精髓部分) 2.1.3 头插 2.1.4…

目录

一. 单链表的特点

1.1 解引用拓展 🤖

二. 单链表的操作

2.1不带头节点的操作

2.1.1 打印 

2.1.1.1 创建结点

2.1.2 尾插(需要二级指针)

注意形参的值不改变实参:(精髓部分)

2.1.3 头插

2.1.4 尾删

2.1.5 头删

2.1.6 在pos前插入

2.1.7 删除pos位置 


一. 单链表的特点

单链表的结点是随机的不是逻辑上相邻即物理上相邻的。用指针指向下一个节点的地址。

1.1 解引用拓展 🤖

解引用有两种,* ->

*p的意思是:是取p所指向内存的值,取多少大小的值,取决于结构体前的数据类型,如int                         取四个字节,char取一个字节。

p->的意思是: 结构体用->,取决于->后面是什么值,如果是->val则取data域的值,->next则                       取下个结点的地址。相当于(*p).next

 

二. 单链表的操作

单链表分为带头结点和不带头结点 ☆*: .。. o(≧▽≦)o .。.:*☆

2.1不带头节点的操作

2.1.1 打印 

打印不用二级指针的原因是:打印不用改变外部结构体指针,只用遍历打印就好了,当要改变结构体指针就要用二级指针。

void SLTPrint(SLNode* phead)
{SLNode* cur = phead;while (cur != NULL){printf("%d->", cur->val);cur = cur->next;}printf("NULL\n");
}
2.1.1.1 创建结点
SLNode* CreateNode(SLNDataType x)
{SLNode* newnode = (SLNode*)malloc(sizeof(SLNode));if (newnode == NULL){perror("malloc fail");exit(-1);}newnode->val = x;newnode->next = NULL;return newnode;
}

2.1.2 尾插(需要二级指针)

void SLTPushBack(SLNode** pphead, SLNDataType x)
{SLNode* newnode = CreateNode(x);if (*pphead == NULL){*pphead = newnode;}else{// 找尾SLNode* tail = *pphead;while (tail->next != NULL){tail = tail->next;}tail->next = newnode;}
}

 

注意形参的值不改变实参:(精髓部分)

接下来是很多人都迷迷糊糊搞不懂的地方。

当前函数定义的可以直接修改,不是当前当前函数定义的,无论是外部函数,还是malloc出来的空间,访问时都要用指针去通过地址修改。全局变量可以直接修改。

形参不不能改变实参的,要传实参的地址才能改变形参。

想用形参pphead改变外部指针phead(实参) ,先将实参的地址&plist,传给实参pphead,这时pphead代表的是plist地址(&plist),*pphead解引用所以*pphead代表是plist,这里是要改变SNode*,所以要node**。这里是要修改结构体的指针plist,所以是需要结构体指针的地址&plist传给*pphead。

如果要改变外部定义的结构指针SLNode*,要用二级指针SLNode**。

如果要改变外部定义的结构体Node,就要一级指针Node*。

2.1.3 头插

void SLTPushFront(SLNode** pphead, SLNDataType x)
{SLNode* newnode = CreateNode(x);newnode->next = *pphead;*pphead = newnode;
}

2.1.4 尾删

删后n-1个不需要二级指针,直接free();

但是只有一个空间的时候,删掉,plist就成了没有指向空间的野指针,所以需要将plist置空,需要改变结构体指针。 

 

void SLTPopBack(SLNode** pphead)
{// 温柔的检查//if (*pphead == NULL)//	return;// 空assert(*pphead);// 1、一个节点// 2、一个以上节点if ((*pphead)->next == NULL){free(*pphead);*pphead = NULL;}else{// 找尾/*SLNode* prev = NULL;SLNode* tail = *pphead;while (tail->next != NULL){prev = tail;tail = tail->next;}free(tail);tail = NULL;prev->next = NULL;*/SLNode* tail = *pphead;while (tail->next->next != NULL){tail = tail->next;}free(tail->next);tail->next = NULL;}
}

 

2.1.5 头删

void SLPopFront(SLNode** pphead) {assert(pphead);if ((*pphead)== NULL) {free(*pphead);*pphead= NULL;}else {/**pphead = (*pphead)->next;free(*pphead);*/SLNode* tmp = *pphead;*pphead = (*pphead)->next;free(tmp);}}

 

2.1.6 在pos前插入

2.1.7 删除pos位置 

不带头结点的完整代码 

//头文件SList.h
#pragma once
#include<stdio.h>
#include<stdlib.h>typedef int SLDataType;
typedef struct SListNode {SLDataType val;struct SListNode* next;}SLNode;
void SLPrint(SLNode* phead);
void SLPushBack(SLNode** pphead, SLDataType x);
void SLPopBack(SLNode** pphead);
void SLPushFront(SLNode** pphead, SLDataType x);
void SLPopFront(SLNode** pphead);//SList.c
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include"SList.h"
#include<assert.h>
//打印
void SLPrint(SLNode* phead) {assert(phead);while (phead!= NULL) {printf("%d->", phead->val);phead = phead->next;}printf("NULL\n");
}
//创建新节点SLNode* CreateNode(SLDataType x) {SLNode* newnode = (SLNode*)malloc(sizeof(SLNode));while (newnode == NULL) {perror("malloc fail");exit(-1);}newnode->val = x;newnode->next = NULL;return newnode;}//尾插
void SLPushBack(SLNode** pphead, SLDataType x) {SLNode* newnode = CreateNode(x);		//调用函数,实参没有数据类型if (*pphead == NULL) {*pphead = newnode;}else {SLNode* tail = *pphead;while (tail->next != NULL) {tail = tail->next;}newnode->next = NULL;tail->next = newnode;}}
//尾删
void SLPopBack(SLNode** pphead) {assert(*pphead);if ((*pphead)->next == NULL) {free(*pphead);*pphead = NULL;}else {SLNode* pre = NULL;SLNode* tail = *pphead;while (tail->next != NULL) {pre = tail;tail = tail->next;}free(tail);tail = NULL;pre->next = NULL;}}
//头插
void SLPushFront(SLNode** pphead, SLDataType x) {SLNode* newnode = CreateNode(x);/*if (*pphead == NULL) {*pphead = newnode;}*/    //可以不要newnode->next = *pphead;*pphead= newnode;
}
//头删
void SLPopFront(SLNode** pphead) {assert(pphead);if ((*pphead)== NULL) {free(*pphead);*pphead= NULL;}else {/**pphead = (*pphead)->next;free(*pphead);*/SLNode* tmp = *pphead;*pphead = (*pphead)->next;free(tmp);}}//Test.c 文件
#define _CRT_SECURE_NO_WARNINGS
#include"SList.h"void Test1() {SLNode* splist=NULL;SLPushBack(&splist, 1);SLPushBack(&splist, 2);SLPushBack(&splist, 3);SLPushBack(&splist, 4);SLPrint(splist);SLPopBack(&splist);SLPopBack(&splist);SLPrint(splist);SLPushFront(&splist, 1);SLPushFront(&splist, 2);SLPushFront(&splist, 3);SLPushFront(&splist, 4);SLPrint(splist);SLPopFront(&splist);SLPopFront(&splist);SLPrint(splist);
}
int main() {Test1();return 0;}

http://www.hkea.cn/news/189679/

相关文章:

  • 昆明做大的网站开发公司google网页搜索
  • 做网站运营需要什么证宁波靠谱营销型网站建设
  • 天津进口网站建设电话青岛网站建设公司
  • 游戏币网站建设win7优化大师官方网站
  • 技术专业网站建设班级优化大师网页版登录
  • 外国网站上做雅思考试台州百度推广优化
  • 男女做那种的的视频网站国内最好的搜索引擎
  • 泉州做网站优化价格成功品牌策划案例
  • 做网站去哪个平台资源优化排名网站
  • 备案的网站名称可以改吗百度青岛代理公司
  • 专做进口批发的网站关键词优化多少钱
  • 做网站有了空间在备案吗百度权重高的网站有哪些
  • 做空间的网站著名的网络营销案例
  • 做网站客户尾款老不给怎么办百度推广年费多少钱
  • 想要将网站信息插到文本链接怎么做百度关键词搜索
  • 江苏网站备案要多久seo域名综合查询
  • 大型网站建设机构津seo快速排名
  • 建设证件查询官方网站宁波做网站的公司
  • 那些网站招聘在家里做的客服网店推广策略
  • 湘西 网站 建设 公司sem代运营托管公司
  • 用css为wordpress排版西安seo外包服务
  • vs2005做网站百度推广官方网站登录入口
  • 乐从网站建设公司北京seo优化推广
  • 如何在网上接做网站的小项目市场监督管理局电话
  • 淘宝购物站优化
  • 石家庄最新疫情轨迹河南网站优化公司哪家好
  • 网站色彩搭配服务器ip域名解析
  • 哪个网站专业做安防如何注册域名网站
  • 穆棱市住房和城乡建设局网站关键词词库
  • 成都网站建设市场什么是网络营销的核心