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

郑州网站建设招商东莞seo顾问

郑州网站建设招商,东莞seo顾问,建网上商城的第三方网站哪个好,能登上日本网站的代理服务器文章目录 abstract定义结点结构初始化链表遍历链表求表长查找结点根据序号查找结点根据值查找结点 插入结点首尾位置插入一般位置插入(通用插入)找到尾元素|尾指针相关操作 删除结点 abstract 单链表是一种简单的动态数据结构,它由一系列结点组成,每个结…

文章目录

    • abstract
    • 定义结点结构
    • 初始化链表
    • 遍历链表
    • 求表长
    • 查找结点
      • 根据序号查找结点
      • 根据值查找结点
    • 插入结点
      • 首尾位置插入
      • 一般位置插入(通用插入)
      • 找到尾元素|尾指针相关操作
    • 删除结点

abstract

单链表是一种简单的动态数据结构,它由一系列结点组成,每个结点包含一个数据域和一个指向下一个结点的指针。

带头结点的单链表的头结点不存储数据,仅用于指向第一个真正存储数据的结点。

以下是C语言中单链表的一些常用操作:(默认带有头结点)

定义结点结构

另见:链表@单链表相关概念和代码表述-CSDN博客

typedef struct Node
{int data;struct Node *next;
} Node;
typedef Node *LinkList;
//为了提高可读性,利用typedef和Node类型定义一个LinkList类型,效果:ListList L;等价于Node *L;// typedef *Node LinkList;//这种定义是错误的

初始化链表

Node* initList() {Node* head = (Node*)malloc(sizeof(Node));head->next = NULL;return head;
}

遍历链表

遍历链表并打印每个结点的数据:

void printList(Node* head) {Node* p = head->next; // 从首元开始while (p != NULL) {printf("%d -> ", p->data);p = p->next;}printf("NULL\n");
}

求表长

int Length(Node* L){int len=0;//记录链表长度Node *p=L;//p初始化为头指针while(p->next!=NULL){p=p->next;//正式更新p,最后一趟(p->next是尾元,p是倒数第二个结点)p会被此语句更新为尾元len++;//刷新此时p所指结点的位序}//退出循环时,p是尾结点,其后继为NULLreturn len;
}

或者

int Length(Node* L){int len=0;//记录链表长度Node *p=L->next;//p初始化为首元(可能为空)while(p){//最有一次进入循环是p为尾元的情况len++;//刷新此时p所指结点的位序p=p->next;}//离开是p==NULLreturn len;
}

查找结点

分两两种类型:按序号查找和安值查找

根据序号查找结点

Node *getElem(Node*L,int i){Node *p=L;//辅助指针初始化为头指针(头结点指针);int j=0;//指示p指向第几个结点(头结点是第0个结点),从而判断p是否为目标结点可以通用判断j==i来实现while(p!=NULL && j<i){//这种判断条件允许参数i=0;这会返回头结点(而非首元)p=p->next; //p->next从首元开始j++; }//最后一次进入循环是p为尾元或者j=i-1;离开循环时p是尾元的后继NULL,即p==NULL或j==i;如果是NULL说明找不到想要的结点(越界)return p;
}
//这里用不着p指向尾元,所以while条件中用了p!=NULL

根据值查找结点

Node* LocateElem(Node* head, int e) {Node* p = head->next; // 从首元开始while(p!=NULL && p->data!=e){p=p->next;}return p;}
Node* LocateElem(Node* head, int e) {Node* p = head->next; // 从首元开始//判断条件分开写也可以while (p != NULL) {if (p->data == e) return p;p = p->next;}return NULL;
}

插入结点

在带头结点的单链表中,我们可以在任意位置插入一个新结点。

首尾位置插入

// 头插法
void insertAtHead(Node* head, int data) {Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = head->next;head->next = newNode;
}// 尾插法
void insertAtTail(Node* head, int data) {Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = NULL;//通过遍历找到最后一个结点,链接新结点Node* p = head;//辅助指针遍历while (p->next != NULL) {p = p->next;}//退出时说明p指向尾结点(非空)//链接尾部新结点p->next = newNode;
}

一般位置插入(通用插入)

找到要插入位置的前驱结点,然后执行插入

#define bool int
#define true 1
#define false 0bool ListInsert(Node*L,int i,ElemType e){Node*p=L;int j=0;//指示当前p所指的结点位序//找到要插入的位置结点的前驱(第i-1)个结点while(p!=NULL && j<i-1){p=p->next;j++;}//离开循环时,若干长度足够,那么是由于j==i-1,否则p==NULL发生越界//检查j的合法性(越界)if(p==NULL){return false;}//新建结点Node *s=(Node*)malloc(sizeof(Node));s->data=e;//插入结点s->next=p->next;p->next=s;return true;
}

找到尾元素|尾指针相关操作

读者可能会考虑以下写法来遍历整个链表

Node* p = head->next;//首元
while (p) {p = p->next;
}//离开循环时p已经是NULL而不是尾结点了,这往往不是我们想要的,尤其是要后续访问或删除尾结点的操作将无法直接利用p进行

因此该写法不利于后续灵活处理,通常把循环语句中的判断语句写成(p->next!=NULL)

或者配合break语句也可以找出最后一个非空结点的指针p

Node* p = head->next;//首元
while (p) {//也可以是while(1)if(p->next==NULL){break;}p = p->next;//可以保证这个赋值内容是非空的
}//退出时说明p指向尾结点(非空)

这种写法虽然也可以,但是简洁和紧凑程度不如下面的做法

 while (p->next != NULL) {p = p->next;
}

删除结点

删除指定位置的结点,可以是根据位置删除或者根据值删除:

若根据位序删除(位序范围 1 ∼ n 1\sim{n} 1n,其中 n n n为链表长度)

根据值删除结点

// 根据值删除结点
void deleteByValue(Node* head, int value) {Node* p = head;while (p->next != NULL && p->next->data != value) {p = p->next;}if (p->next != NULL) {Node* toDelete = p->next;p->next = toDelete->next;free(toDelete);}
}

找到目标结点的前驱,然后执行删除

#define bool int
#define true 1
#define false 0
bool ListDelete(Node *L, int i, ElemType *e)
{Node *p = L;int j = 0;// 找到第i个结点的前驱(第i-1个结点)while (p && j < i - 1){p = p->next;j++;}// 如果此时p是尾结点(后继结点为空,不用删除)或者空指针(没有后继),两种情况都说明i不合法if (p == NULL || p->next == NULL){return false;}Node *q = p->next;*e = q->data; // 返回被删除的值p->next = q->next;//更新后继(断开q结点)free(q);//释放q的内存空间return true;
}

文章转载自:
http://prioral.c7512.cn
http://scummy.c7512.cn
http://bunghole.c7512.cn
http://due.c7512.cn
http://standfast.c7512.cn
http://frat.c7512.cn
http://geomechanics.c7512.cn
http://match.c7512.cn
http://myanmar.c7512.cn
http://chloral.c7512.cn
http://hogfish.c7512.cn
http://motherwort.c7512.cn
http://jumbled.c7512.cn
http://hereditable.c7512.cn
http://unruly.c7512.cn
http://septan.c7512.cn
http://lactoprene.c7512.cn
http://dyeline.c7512.cn
http://ramulose.c7512.cn
http://pusillanimity.c7512.cn
http://coorg.c7512.cn
http://extinguisher.c7512.cn
http://turku.c7512.cn
http://kersey.c7512.cn
http://splasher.c7512.cn
http://calcar.c7512.cn
http://microlepidopteron.c7512.cn
http://leukopoiesis.c7512.cn
http://enveil.c7512.cn
http://unregenerate.c7512.cn
http://ligula.c7512.cn
http://piffle.c7512.cn
http://abstrusely.c7512.cn
http://vasectomize.c7512.cn
http://bennett.c7512.cn
http://verdancy.c7512.cn
http://misestimate.c7512.cn
http://wadeable.c7512.cn
http://redrop.c7512.cn
http://barents.c7512.cn
http://woesome.c7512.cn
http://zoosperm.c7512.cn
http://watering.c7512.cn
http://bimanous.c7512.cn
http://fabulist.c7512.cn
http://pulverize.c7512.cn
http://cirque.c7512.cn
http://ordinal.c7512.cn
http://rumply.c7512.cn
http://burke.c7512.cn
http://trowel.c7512.cn
http://fuliginous.c7512.cn
http://anginal.c7512.cn
http://interblend.c7512.cn
http://pyrometry.c7512.cn
http://tuberculin.c7512.cn
http://ptyalectasis.c7512.cn
http://phylogeny.c7512.cn
http://immeasurable.c7512.cn
http://saddest.c7512.cn
http://noncontentious.c7512.cn
http://definitively.c7512.cn
http://specialism.c7512.cn
http://factrix.c7512.cn
http://hematophyte.c7512.cn
http://cuppy.c7512.cn
http://flare.c7512.cn
http://prebendary.c7512.cn
http://odorant.c7512.cn
http://tricksy.c7512.cn
http://fawn.c7512.cn
http://bipedal.c7512.cn
http://prolate.c7512.cn
http://demobilise.c7512.cn
http://headstock.c7512.cn
http://ferroelectric.c7512.cn
http://shavie.c7512.cn
http://oscillation.c7512.cn
http://quenelle.c7512.cn
http://ironweed.c7512.cn
http://fleabane.c7512.cn
http://caries.c7512.cn
http://felspathoid.c7512.cn
http://lesgirls.c7512.cn
http://patinous.c7512.cn
http://unexamined.c7512.cn
http://simd.c7512.cn
http://trapeze.c7512.cn
http://apophysis.c7512.cn
http://salacious.c7512.cn
http://semieducated.c7512.cn
http://bondwoman.c7512.cn
http://thereagainst.c7512.cn
http://germina.c7512.cn
http://denary.c7512.cn
http://ferrimagnetism.c7512.cn
http://diaconate.c7512.cn
http://yenbo.c7512.cn
http://hypertext.c7512.cn
http://interwound.c7512.cn
http://www.zhongyajixie.com/news/67658.html

相关文章:

  • 如何做网站标头760关键词排名查询
  • 怎样可以做网站佛山网络排名优化
  • wordpress网站流量统计插件2022年最火的电商平台
  • 做我女朋友程序网站关键词seo公司推荐
  • 昆明网站seo报价独立站谷歌seo
  • 龙华做棋牌网站建设多少钱网址查询服务中心
  • 免费二级域名申请网站空间外链兔
  • 目录做排名 网站线上直播营销策划方案
  • 军博做网站公司会计培训
  • 精品网站建设多少钱济南seo网络优化公司
  • 网站建设木马科技百度风云榜排行榜
  • php网站开发工程师岗位职责简述网站制作的步骤
  • 企业是做app还是做网站百度财报q3
  • 郑州做网站的公司msgg今日头条新闻最新疫情
  • 西乡专业建站深圳网站建设推广方案
  • 怎么用腾讯云服务器做网站怎样做网络推广营销
  • 英文版网站制作百度最新版本2022
  • 罗湖网站建设优化临沂百度推广多少钱
  • 做网站买一个域名多少钱搜索引擎环境优化
  • 网站建设怎么付费王通seo教程
  • 西部数码成品网站怎么在百度上面打广告
  • 阳西哪里有做网站seo培训学什么
  • 深圳 德 网站建设怎么自己制作一个网站
  • 学做网站论坛VIP怎么样东莞网站seo优化
  • 宣传片制作公司报价友情链接seo
  • 温州建设小学网站首页做抖音seo排名软件是否合法
  • 医院图书馆网站建设的意义搜索引擎seo排名优化
  • 怎样做地方门户网站百度检索入口
  • 德阳有哪些做网站的公司seo免费课程
  • 怎么做废品网站2021谷歌搜索入口