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

网站可分析哪个网站专门做灵异文

网站可分析,哪个网站专门做灵异文,wordpress首页优化,成都注册公司代理公司文章目录 基本概念链表的创建链表结点定义链表创建 链表遍历链表释放链表查找链表删除链表插入测试用例 基本概念 参考:链表基础知识详解(非常详细简单易懂)-CSDN博客 链表是一种线性存储结构,链表在物理存储上是非连续的&#xf…

文章目录

  • 基本概念
  • 链表的创建
    • 链表结点定义
    • 链表创建
  • 链表遍历
  • 链表释放
  • 链表查找
  • 链表删除
  • 链表插入
  • 测试用例

基本概念

参考:链表基础知识详解(非常详细简单易懂)-CSDN博客

  1. 链表是一种线性存储结构,链表在物理存储上是非连续的,数据元素的逻辑顺序通过链表中的指针链接
  2. 链表由一系列的结点组成,每个节点主要包含两个部分:数据域+指针域
  3. 数据域存放实际的数据;指针域存放下一个节点的地址(首地址)
  4. 链表分为单向链表和双向链表:单向链表由一个指针next,存放下一个节点的首地址;双向链表由next和previous,分别存放下一个节点和上一个节点的首地址
  5. 常见面试题:链表和数组的对比。链表的内存是不连续的,链表通过节点把离散的数据链接成一个表;而数组是通过开辟一段连续的内存来存储数据。数组成员和链表节点的数据类型可以是标准的C类型或者是用户自定义的类型。数组有起始地址和结束地址,链表没有明确的起始地址和结束地址,为了方便操作,可能会人为规定一个根节点(当然这是对于双向链表来说的,单向链表还是有头尾之分的)

以下代码只针对单链表

链表的创建

链表结点定义

// 定义一个链表节点结构体
typedef struct listNode
{int val;struct listNode *next;
} listNode;

链表创建

/*** 创建链表*  用到了二级指针要改变指针指向的值,传入指针要改变指针的指向(指针本身),传入二级指针*/
void listCreate(listNode **p_head, listNode *p_new)
{listNode *p_move = *p_head;if (*p_head == NULL){*p_head = p_new;}else{while (p_move->next != NULL){p_move = p_move->next;}p_move->next = p_new;p_new->next = NULL;}
}

链表遍历

/*** 遍历链表*/
void listPrint(listNode *head)
{if (head == NULL){cout << "list is NULL" << endl;return;}listNode *p = head;while (p != NULL){cout << p->val << " ";p = p->next;}cout << endl;
}

链表释放

/*** 释放链表*/
void listFree(listNode **head)
{listNode *p = *head;while (*head != NULL){p = *head;*head = (*head)->next;free(p);p = NULL; // 防止野指针}cout << "list free" << endl;
}

链表查找

/*** 链表查找*/
void listFind(listNode *head, int val)
{if (head == NULL)return;listNode *p = head;while (p != NULL){if (p->val == val){cout << "I find " << p->val;}p = p->next;}cout << endl;
}

链表删除

/*** 链表删除*/
void listDelete(listNode **head, int val)
{if (*head == NULL){return;}listNode *slow = NULL;listNode *fast = *head;while (fast != NULL){if (fast->val == val){if (fast == *head){*head = (*head)->next;free(fast);cout << "delete done" << endl;fast = *head;}else{slow->next = fast->next;free(fast);cout << "delete done" << endl;fast = slow->next;}}else{slow = fast;fast = fast->next;}}
}

链表插入

/*** 链表插入* 根据val值来判断插入位置(从小到大)*/
void listInsert(listNode **head, listNode *p_new)
{// 如果链表为空,则插入的结点为头结点if (*head == NULL){*head = p_new;p_new->next = NULL;return;}// 定义快慢指针listNode *slow = NULL;listNode *fast = *head;while (p_new->val >= fast->val && fast->next != NULL){slow = fast;fast = fast->next;}if (p_new->val < fast->val) // 如果找到了大于新结点val的结点,则新结点插入该结点左边{if (fast == *head){p_new->next = *head;*head = p_new;}else{p_new->next = slow->next;slow->next = p_new;}}else // 没有找到就插入右边{fast->next = p_new;p_new->next = NULL;}
}

测试用例


#include <iostream>
#include <vector>
#include <cstdio>using namespace std;// 定义一个链表节点结构体
typedef struct listNode
{int val;struct listNode *next;
} listNode;/*** 创建链表*  用到了二级指针要改变指针指向的值,传入指针要改变指针的指向(指针本身),传入二级指针*/
void listCreate(listNode **p_head, listNode *p_new)
{listNode *p_move = *p_head;if (*p_head == NULL){*p_head = p_new;}else{while (p_move->next != NULL){p_move = p_move->next;}p_move->next = p_new;p_new->next = NULL;}
}/*** 遍历链表*/
void listPrint(listNode *head)
{if (head == NULL){cout << "list is NULL" << endl;return;}listNode *p = head;while (p != NULL){cout << p->val << " ";p = p->next;}cout << endl;
}/*** 释放链表*/
void listFree(listNode **head)
{listNode *p = *head;while (*head != NULL){p = *head;*head = (*head)->next;free(p);p = NULL; // 防止野指针}cout << "list free" << endl;
}/*** 链表查找*/
void listFind(listNode *head, int val)
{if (head == NULL)return;listNode *p = head;while (p != NULL){if (p->val == val){cout << "I find " << p->val;}p = p->next;}cout << endl;
}/*** 链表删除*/
void listDelete(listNode **head, int val)
{if (*head == NULL){return;}listNode *slow = NULL;listNode *fast = *head;while (fast != NULL){if (fast->val == val){if (fast == *head){*head = (*head)->next;free(fast);cout << "delete done" << endl;fast = *head;}else{slow->next = fast->next;free(fast);cout << "delete done" << endl;fast = slow->next;}}else{slow = fast;fast = fast->next;}}
}/*** 链表插入* 根据val值来判断插入位置(从小到大)*/
void listInsert(listNode **head, listNode *p_new)
{// 如果链表为空,则插入的结点为头结点if (*head == NULL){*head = p_new;p_new->next = NULL;return;}// 定义快慢指针listNode *slow = NULL;listNode *fast = *head;while (p_new->val >= fast->val && fast->next != NULL){slow = fast;fast = fast->next;}if (p_new->val < fast->val) // 如果找到了大于新结点val的结点,则新结点插入该结点左边{if (fast == *head){p_new->next = *head;*head = p_new;}else{p_new->next = slow->next;slow->next = p_new;}}else // 没有找到就插入右边{fast->next = p_new;p_new->next = NULL;}
}int main(int argc, char const *argv[])
{listNode *head = NULL, *p_new = NULL;int num = 0;for (int i = 0; i < 10; i++){p_new = (listNode *)malloc(sizeof(listNode));p_new->val = i;listCreate(&head, p_new);}listPrint(head);listFind(head, 3);listDelete(&head, 3);listPrint(head);cout << "结点插入测试" << endl;listNode *p_insert = (listNode *)malloc(sizeof(listNode));p_insert->val = 3;listInsert(&head, p_insert);listPrint(head);listFree(&head);return 0;
}
http://www.yayakq.cn/news/688906/

相关文章:

  • 天河区做网站的公司工程造价定额在哪查
  • 做网站的岗位洛阳专业网站设计开发制作建站公司
  • 免费杂志排版软件丽水网站seo
  • cnzz统计代码放在网站网站开发工程师代码
  • 广州手机网站建设联系电话wordpress 页面内存大
  • 有什么比较好的画册设计网站长沙网站建设优化
  • 女做受网站数据库网页制作教程
  • 好的模板网站推荐西部数码网站管理助手c盘安装
  • 本地集团网站建设内蒙古企业网站建设
  • 婴儿网站模板如何修改响应式网站模板
  • 唐山建设招聘信息网站怎样理解网站建设与开发这门课
  • 山西营销网站建设联系方式wordpress小工具位置
  • 分子信标探针在线设计网站iis wordpress安装教程
  • 多个网站优化怎么做wordpress首页按钮
  • 用python开发网站开发技术郑州seo外包服务
  • 网站seo运营365房产网
  • 化学网站建设推广策略是什么意思
  • 广州网站建设正规公司设计网站推荐提升审美
  • 哈尔滨手机网站建设报价网站开发的现状
  • 360网站外链建设企业服务云平台
  • 衡水建网站费用网站搭建费用
  • 资源网站搭建网站建设属于IT吗
  • 广东建设工程协会网站做企业网站有哪些系统
  • 届毕业设计代做网站wap和app的区别
  • 技术网站源码wordpress仙桃住房和城乡建设部网站
  • 网站备案作用万网建站流程
  • php后台关闭网站 功能怎么实现微博营销的技巧有哪些
  • 做定制商品的网站威海那家做网站好
  • 铭万魔方做网站怎么样东莞房价2023最新价格
  • 免费网站建设找云狄做请柬网站