c语言单链表实现19个功能完全详解,c语言-单链表(二)

继续复习链表知识点,本章包含单链表的增加,删除,判断是否为空,和链表长度,以及链表的排序 几个知识点

1.链表的判断是否为空

//1.判断链表是否为空

bool isempty_list(PNODE pHead) {

return pHead->pNext == NULL;

}

2. 计算链表的长度

//2.链表长度

int length_list(PNODE pHead) {

PNODE pFirst = pHead->pNext;//获取头结点

int num = 0;

while (pFirst != NULL)

{

num++;

pFirst = pFirst->pNext;

}

return num;

}

3. 在制定位置增加节点

//指索引位置插入节点

bool insert_list(PNODE pHead, int pos, int data) {

PNODE p = pHead;//头结点

int i = 0;

while (p != NULL&&i <= pos)

{

p = p->pNext;

i++;

}

//pos 是索引位置,循环i不能>pos+1

if (p == NULL || i > (pos + 1))

{

return false;

}

PNODE pNew = (PNODE)malloc(sizeof(PNODE));

if (NULL == pNew)

{

printf("内存分配失败");

exit(-1);

}

pNew->data = data;

pNew->pNext = p->pNext;

int pVal = p->data;

p->pNext = pNew;

return true;

}

4. 在指定位置删除节点

bool delete_list(PNODE pHead, int pos) {

PNODE p = pHead->pNext;

int i = 0;

//这样循环为了获取pos 前面一个节点

while (NULL != p&&i < pos - 1)

{

p = p->pNext;

i++;

}

if (NULL == p || i > pos - 1)

{

return false;

}

PNODE q = p->pNext;

p->pNext = p->pNext->pNext;

free(q);

q = NULL;

return true;

}

5.节点的排序

//排序算法

void sort_list(PNODE pHead) {

int len = length_list(pHead);

PNODE p, q;

int i, j, temp;

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)

{

temp = p->data;

p->data = q->data;

q->data = temp;

}

}

}

return;

}

6. 测试代码

void main(void) {

PNODE pHead = create_list();

if (isempty_list(pHead)) {

printf("链表为空\n");

}

else {

printf("链表不为空\n");

}

bool is_insert=insert_list(pHead, 2, 100);

if (is_insert)

{

printf("链表在索引2出插入100 成功\n");

show_list(pHead);

}

else {

printf("链表在索引2出插入100 失败\n");

}

printf("删除节点索引:1\n");

bool is_del=delete_list(pHead, 1);

if (is_del)

{

printf("删除节点索引:1 成功\n");

show_list(pHead);

}

else {

printf("删除节点索引:1 失败\n");

}

}

c8ee96825842cd6c86d6604fc6813d64.png

C语言单链表实现19个功能完全详解

谢谢Lee.Kevin分享了这篇文章 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将 ...

C语言—单链表

单链表操作:读取,插入和删除 #include "stdafx.h" #include #include #inc ...

C语言——单链表初始化、求表长、读表元素、插入元素

头文件Linear.h // 单链表的类型定义 typedef struct node { int data; // 数据域 struct node *next; // 指针域 }Node, *Lin ...

c语言单链表实现

/************************************************************************* > File Name: singleLin ...

C语言单链表的实现

// //  main.c //  gfhjhgdf // //  Created by chenhao on 13-12-23. //  Copyright (c) 2013年 chenhao. A ...

c语言-单链表(一)

定义节点: typedef struct Node { int data; Node* pNext; }NODE, *PNODE; 细节说明,PNode 就代表struct Node* ,上面的表单是 ...

c语言——单链表分拆——头插法创建链表,尾插法生成链表

#if 1 #include #include #include using namespace std; ...

C语言单链表简单实现&lpar;简单程序复杂化)

PS: goto还是很好玩的. #include #include typedef struct _node{ int value; ...

c语言单链表,冒泡排序

node *sort(node *head){ node *p,*p2,*p3; int n; int temp; n=length(head); if(head==NULL||head->ne ...

随机推荐

Linux启动过程详解(inittab、rc&period;sysinit、rcX&period;d、rc&period;local)

启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

php摇杆Tiger摇奖

先说下整体思路,代码已附下方. 1.递归产生一个非中奖数(即非连续数字:'111','222','333','444','555','666','777','888') 2.点击摇奖,把奖项通过设置的 ...

分享一个漂亮WPF界面框架创作过程及其源码

本文会作为一个系列,分为以下部分来介绍: (1)见识一下这个界面框架: (2)界面框架如何进行开发: (3)辅助开发支持:Demo.模板.VsPackage制作. 框架源码如下所示. 本文介绍第(1) ...

MVC ActionResult视图结果

摘要 MVC框架针对HttpResponse进行抽象与多态,使HttpResponse均可表示为ActionResult.那么,抽象和多态表现在哪里呢? //封装一个Action的结果. public ...

cppunit使用详解

cppunit使用详解 第一步:如何安装 (我的运行环境: fc7 Linux, gcc4)    cppunit 的安装是相当标准的linux的安装过程    a. 下载cppunit的源文件    ...

移动端ios电话号码

Bash Shell编程要点小结

一.case命令 case variable invalue1) command(s);; value2) command(s);; *) command(s);; esac 如果case变量没有被匹 ...

Netty的并发编程实践2:volatile的正确使用

长久以来大家对于volatile如何正确使用有很多的争议,既便是一些经验丰富的Java设计师,对于volatile和多线程编程的认识仍然存在误区.其实,volatile的使用非常简单,只要理解了Jav ...

scala函数

1.probablePrime(6,Random) Random是scala.util._中的包 probablePrime是scala.math.BigInt._伴生对象中的方法: probable ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值