插入算法和删除演示:

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>typedef struct Node {int data;  //数据域struct Node * pNext;   //指针域}Node, *pNode;//函数声明
pNode create_list();
void traverse_list(pNode  pHead);      //遍历bool is_empty(pNode pHead);          //判断链表是否为空
int length_list(pNode pHead);        //链表的长度
bool insert_list(pNode, int, int);   //插入  第一个参数表示插入的链表  第二个参数表示插入的位置  第三个参数表示插入的元素
bool delete_list(pNode, int, int *); //第一个参数表示要删除的位置,第二个参数表示要删除的位置 第三参数表示删除的元素的地址放入指针
void sort_list(pNode pHead);int main(void) {pNode  pHead = NULL;   //等价于 struct Node *pHead=NULLpHead = create_list();    //create_list()创建一个非循环单链表,并将该链表的头结点的地址赋给pHeadtraverse_list(pHead);     //遍历输出/**int len = length_list(pHead);printf("链表的长度%d\n", len);sort_list(pHead);      //选择排序traverse_list(pHead);  //遍历输出*/insert_list(pHead, 4, 33);traverse_list(pHead);//遍历输出int val;if (delete_list(pHead, 4, &val)) {printf("删除成功,删除的元素%d:\n",val);}else {printf("删除失败,删除的元素不存在%d:\n",val);}traverse_list(pHead);//遍历输出while(true){}return 0;
}//创建单链表
pNode create_list() {int len;   //用来存放有效节点数int i;int val; //存放用户临时输入的节点数据//我们首先要先生成一个头结点  不存放有效数据pNode pHead = (pNode)malloc(sizeof(Node));if (NULL == pHead) {printf("内存分配失败");//程序退出exit(-1);}pNode pTail = pHead;    //pTail也指向了头结点pTail->pNext = NULL;printf("请输入你要输入节点的个数 len =");scanf_s("%d", &len);//假设输入的长度5,我们需要循环for ( i = 0; i < len; i++){printf("请输入第%d个节点的值:", i + 1);scanf_s("%d", &val);pNode pNew=(pNode)malloc(sizeof(Node));if (NULL == pNew) {printf("内存分配失败");//程序退出exit(-1);}pNew->data = val;//pHead->pNext = pNew;//pNew->pNext = NULL;pTail->pNext = pNew;  //将这个新节点挂到尾节点pNew->pNext = NULL;pTail = pNew;}return pHead;
}//遍历
void traverse_list(pNode  pHead) {pNode p = pHead->pNext;while (p!=NULL){printf("%d ",p->data);p = p->pNext;}//换行printf("\n");return;
}//判断链表是否为空
bool is_empty(pNode pHead) {if (NULL == pHead->pNext) {return true;}else {return false;}
}//求一个链表的长度
int length_list(pNode pHead) {pNode p=pHead->pNext;   //第一个节点int len = 0;while (NULL != p) {   //只要指针指向的下一个元素不是空,指针就继续向后移动++len;p=p->pNext;}return len;
}//排序算法
void sort_arr(pNode pHead) {int i, j, tmp;int arr[6] = { 5,8,45,2,9,3 };int len=length_list(pHead);  //获取链表长度pNode p, q;for (i = 0; i < len-1; i++){for (j = i+1; j < len; j++){}}}//选择排序  从小到大排
void sort_list(pNode pHead){int i,j,t;int len = length_list(pHead);  //获取链表长度pNode p,q;for (i = 0, p = pHead->pNext; i < len - 1; ++i, p = p->pNext){for (j = i + 1, q = p -> pNext; j < len; ++j, q = q->pNext) {if (p->data > q->data) {        //类似于 数组中的: a[i] > a[j]t = p->data;                //类似于数组中的: t = a[i];p->data = q->data;          //类似于数组中的: a[i] = a[j];q->data = t;                // 类似于数组中的: a[j] = t;}}}
}//在pHead所指向链表的第pos个节点的前面插入-一个新的结点,该节点的值是val,并 且pos的值是从1开始
bool insert_list(pNode pHead, int pos, int val) {int i = 0;pNode p = pHead;while (NULL != p && i < pos - 1) {p = p->pNext;++i;}if (i > pos - 1 || NULL == p) {return false;}pNode pNew = (pNode)malloc(sizeof(Node));if(NULL == pNew){printf("动态分配内存失败!");exit(-1);}pNew->data = val;//定义一个临时节点,数据交换存储pNode tmp = p->pNext;p->pNext=pNew;pNew->pNext = tmp;return true;}bool delete_list(pNode pHead, int pos, int * val) {int i = 0;pNode p = pHead;while (NULL != p->pNext && i < pos - 1) {p = p->pNext;++i;}if (i > pos - 1 || NULL == p->pNext) {return false;}pNode tmp=p->pNext;  //将需要删除的节点临时保存起来*val = tmp->data;p->pNext = p->pNext->pNext;   //删除p节点后一个节点free(tmp);tmp = NULL;return true;
}

链表删除功能实现演示相关推荐

  1. 链表插入功能实现演示

    #include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h&g ...

  2. java单链表查询功能,Java 实现简答的单链表的功能

    作者:林子木  博客网址:http://blog.csdn.net/wolinxuebin 參考网址:http://blog.csdn.net/sunsaigang/article/details/5 ...

  3. Linux使用双向链表实现图片、音乐、视频的切换和删除功能

    Linux使用双向链表实现图片.音乐.视频的切换和删除功能 Linux检索目录下的后缀文件(.bmp .avi .mp3),并将文件名存入链表中 一.双向链表的实现 1.创建双向链表 2.链表节点添加 ...

  4. JDBC实现四六级考试记录添加、查询、删除功能

    JDBC实现四六级考试记录添加.查询.删除功能 1. 代码演示 2. 项目的目录结构 3. 数据库mysql 4. code 4.1 ExamTest.class package com.shan.e ...

  5. 单链表简单功能的代码实现

    上一章我们对顺序表的一些简单功能做了代码实现,但对于顺序存储的一些缺点,这一章我们实现一种简单的链式结构的数据结构单链表. 文章目录 前言 单链表打印 创建新的结点 单链表尾插 单链表头插 单链表尾删 ...

  6. java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示

    目录 1.题目说明 2.实验设计 2.1 表设计 2.2 工程结构 3.运行界面截图与说明 4.小结 附录:源代码 src/main/java src/main/java/bean Goods.jav ...

  7. oracle flashback清理,Oracle的Flashback Drop闪回删除功能实践

    Oracle的Flashback Drop闪回删除功能给出我们一种误DROP删除表的便捷恢复方式,实现这种功能的原理是Oracle的"回收站"(RecycleBin)功能.注意,如 ...

  8. [vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件

    前言 今天接到领导布置的一个任务,是之前同事负责的项目.离职了,现在客户有些地方需要修改,由于我之前参与过,就落在我的头上了. 然后我就把代码弄了过来,打开发现其中需要用到水晶报表.(我觉得不好用,不 ...

  9. html5实现ios长按图标后进入图标排序及删除功能的效果

    2019独角兽企业重金招聘Python工程师标准>>> html5实现ios长按图标后进入图标排序及删除功能的效果 我们知道在ios(国产定制安卓系统基本都有)设备上按下图标,图标就 ...

最新文章

  1. 怎么把数字替换成空格_Excel中带单位后缀的数字如何计算?
  2. C++判断exe是32位还是64位
  3. blocked by CORS policy,是否跨域?
  4. 【面向对象】面向对象程序设计测试题5-Java中的对象交互测试题
  5. c++程序设计中的多态与虚函数知识点
  6. asp.net调试技巧
  7. 关于物联网规则引擎技术,你想要知道的都在这儿!
  8. 2016-5-31 项目结构调整
  9. 利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
  10. 灵活好用,GIF 屏幕录制工具
  11. python oct_安装在python oct2py中使用的gnuoctave
  12. 游园惊梦--记游第九届软博会
  13. Java并发编程(一)——并发的基本概念
  14. 618最强攻略揭秘:成为网易考拉的黑卡会员!
  15. 微信小程序组件库——colorUI 的使用方法
  16. (unity)新手接入Facebook登录,分享以及google登录,Android,IOS,OC接入篇
  17. CAD二次开发——选择集(1)
  18. excel函数去重_Excel 2010中去除重复项的几种常用技巧
  19. 在线教育大数据营销平台实战(一):大数据平台构建实战
  20. 论文学习笔记: Graph Attention Network

热门文章

  1. 通过八叉树进行空间分割和搜索
  2. mysql忘记i密码_Mysql忘记密码处理过程
  3. ping 不是内部或外部命令,也不是可运行的程序 或批处理文件。的解决办法
  4. 不同操作系统上DNS客户端操作区别汇总
  5. 工厂方法 Factory Method
  6. Fixed Function Shader
  7. 跟我一起读postgresql源码(十六)——Executor(查询执行模块之——control节点(下))
  8. rhel Linux 网络配置
  9. BCGControlBar入门使用手册
  10. html5晋级之路-css背景