不带头结点的单链表操作,包括插入、遍历、统计结点数等,要求写出数据结构算法思想及C语言实现函数

本文为博主原创文章,未经博主允许不得转载。
版权为陈博超所有,第一次于2021年06月22日发表于BLOG上
本BLOG上原创文章未经本人许可,不得用于商业用途。转载请经允许后注明出处,否则保留追究法律责任的权利。
*
算法如下:

//不带头结点的单链表操作
#include<stdio.h>
#include<malloc.h>typedef int DataType;typedef struct Node
{DataType Data;struct Node* next;
}SLNode;//初始化
void ListInitiate(SLNode** head)
{*head = NULL;
}//求当前数据元素个数
int ListLength(SLNode* head)
{   SLNode* p;int size = 0;p = head;while (p != NULL){p = p->next;size++;}return size;
}//插入新结点
int ListInsert(SLNode** head, int i, DataType x)
{SLNode* p, * q, * m;int j;if (i == 0)                    //若在第0个位置插入{m = (SLNode*)malloc(sizeof(SLNode));m->Data = x;m->next = *head;*head = m;return 1;}else                      //若不在第0个位置插入{p = *head;j = 0;while (p->next != NULL && j < i - 1)//最终让指针p指向第i-1个结点 {p = p->next;j++;}if (j != i - 1){printf("插入元素位置参数错!");return 0;}q = (SLNode*)malloc(sizeof(SLNode));q->Data = x;q->next = p->next;p->next = q;return 1;}
}//删除新结点
int ListDelete(SLNode** head, int i, DataType* x)
{SLNode* p, * q, * m, *s;int j;if (i == 0)                //若在第0个位置删除{m = *head;         //让m指向第0个结点*x = m->Data;        //把指针m所指的结点数据域值赋给x*head = m->next;  //删除free(m);            //释放m所指结点的内存空间return 1;}else                    //若不在第0个位置删除{p = *head;j = 0;while (p->next != NULL && p->next->next != NULL && j < i - 1)//循环结束时指针p指向第i-1个结点{p = p->next;j++;}if (j != i - 1){printf("删除元素位置错误!");return 0;}s = p->next;*x = s->Data;p->next = p->next->next;free(s);return 1;}
}//取数据元素
int ListGet(SLNode* head, int i, DataType* x)
{SLNode* p;int j;p = head;j = 0;while (p->next != NULL && j < i){p = p->next;j++;}if (j != i){printf("取数据元素位置错!");return 0;}*x = p->Data;return 1;
}//撤销单链表
void Destory(SLNode** head)
{SLNode* p, * q;p = *head;while (p != NULL){q = p;p = p->next;free(q);}*head = NULL;
}

主函数如下:

//不带头结点的单链表操作
#include<stdio.h>
#include<malloc.h>
#include<Windows.h>
typedef int DataType;
#include"数据结构复习.h"int main()
{SLNode* head;int i, x;ListInitiate(&head);            //初始化for (i = 0; i < 10; i++)        //插入10个数据元素{ListInsert(&head, i, i + 1);}ListDelete(&head, 4, &x);       //删除数据元素5for (i = 0; i < ListLength(head); i++)//显示当前数据元素{ListGet(head, i, &x);       //取元素printf("%d      ", x);      //显示}Destory(&head);                 ///撤销单链表system("pause");return 0;
}

运行截图如下:

码字不易,穷酸学生,各位老板打赏个1分钱支持一下,谢谢大家。

不带头结点的单链表操作相关推荐

  1. c语言实现--不带头结点的单链表操作

    1,不带头结点的单链表操作中,除了InitList(),GetElem(),ListInsert(),ListDelete()操作与带头结点的单链表有差别外,其它的操作基本上一样. 2,不带头结点单链 ...

  2. 【考研】分清带头结点和不带头结点的单链表

    CSDN话题挑战赛第2期 参赛话题:学习笔记 前言 为分清带结点与不带头结点的单链表操作,本文以图文和表格形式描述了两者之间的区别.考研中,数据结构的单链表操作是重要考点,其中,比较常考带头结点的链表 ...

  3. 对 带头结点的单链表 的操作

    //带头结点的单链表 #include<iostream> using namespace std; typedef struct student {        int data;   ...

  4. 带头结点的单链表的逆置

    代码 //带头结点的单链表逆置.cpp #include<iostream> using namespace std; struct Node{ int data; Node* next; ...

  5. 【C语言】数据结构C语言版 实验3 带头结点的单链表

    slnklist.h #include <stdio.h> #include <stdlib.h> /************************************* ...

  6. python实现带头结点的单链表的就地逆置_6-1 带头结点的单链表就地逆置 (10 分)...

    本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...

  7. 带头结点的单链表的初始化,建立,插入,查找,删除

    //带头结点的单链表的初始化,建立,插入,查找,删除     #include <stdio.h>     #include <stdlib.h> typedef int El ...

  8. java带头结点的单链表_自己实现集合框架 (五): 带头结点单链表的实现

    这是系列文章,每篇文章末尾均附有源代码地址.目的是通过模拟集合框架的简单实现,从而对常用的数据结构和java集合有个大概的了解.当然实现没有java集合的实现那么复杂,功能也没有那么强大,但是可以通过 ...

  9. python实现带头结点的单链表的就地逆置_带头结点的单链表就地逆置

    本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...

最新文章

  1. R回归模型glm与lm的区别
  2. 27. Leetcode 92. 反转链表 II (链表-反转链表)
  3. 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结
  4. mysql修改存储引擎报错,MySQL改变表的存储引擎
  5. 理解一下select 1 和 exists
  6. ARM的UART实验
  7. jvm--Garbage Collection
  8. 信息学奥赛一本通 1020:打印ASCII码 | OpenJudge NOI 1.2 07
  9. 网易云音乐网站音乐下载
  10. AutoRunner 功能自动化测试项目实训之认识自动化测试工具AutoRunner(二)
  11. 蔡军生先生第二人生的源码分析(2)第二人生的基本功能
  12. 人生之路1.20代码 第二部分
  13. 简单的C语言实训代码
  14. MOOS-ivp 实验四 MOOS编程入门(2)MOOS类讲解
  15. 拦截召唤神龙云文件,运行本地文件(侵删)
  16. java实现单一登录 踢人效果
  17. 虚拟机Linux上网ping百度跳过的坑,亲测有效
  18. 前端练习 静态网页(一):导航栏
  19. 段永平:不用老提“双赢”,不占别人便宜就行
  20. 拿下我人生中第7个Offer,成功入职字节跳动

热门文章

  1. 数据库删除重复(所有列都重复)数据,保留一条,并且再给此表加上联合主键
  2. 到底死不死我就请了七天假_“你到底死不死?我就请了7天假”一个儿子这样说。。。。...
  3. wm(欧胜)8960音频编解码芯片
  4. “国际软件自由日”头脑风暴成果
  5. 华为机试2022.4.13:硬件资源分配
  6. VS2019添加类设计器组件
  7. win10没有管理员执行权限
  8. 嵌入式软件开发就业面试题。2022最新,最全总结。
  9. 如何制作微课?详解:微课视频制作方法之微课制作软件
  10. 华通-小天 IDC