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

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");
}
}

  

c语言-单链表(二)的更多相关文章

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

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

  2. C语言—单链表

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

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

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

  4. c语言单链表实现

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

  5. C语言单链表的实现

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

  6. c语言-单链表(一)

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

  7. 零基础玩转C语言单链表

    下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 n ...

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

    #if 1 #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; ...

  9. C语言单链表简单实现(简单程序复杂化)

    PS: goto还是很好玩的. #include <stdio.h> #include <stdlib.h> typedef struct _node{ int value; ...

随机推荐

  1. Qt QT的IO流 QT输入输出

    1. QFile QDataStream 读写文件  二进制读写文件 #include <QApplication> #include <QtGui> #include < ...

  2. Python之print语句Python的注释

    话不多说直接切入正题 print语句可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print 'hello, world' 注意: 1. ...

  3. eclipse build path 以及 clean(转)

    1.设置"source folder"与"output folder". source folder:存放.Java源文件的根目录:output folder: ...

  4. Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  5. 刻录DVD.Win7系统盘(U盘)

    ZC:Win7x86的U盘安装盘做好之后,U盘 里面会留有 引导信息,在以后不想要它(引导信息)的时候 该如果将它删掉?直接普通的格式化 能行吗? ZC:(20180423)发现,UltraISO制作 ...

  6. review15

    不同区域的星期格式 不同国家的星期的简称或全称有很大的不同.如果想用特定地区的星期格式来表示日期中的星期,可以用format的重载方法: format(Locale locale, 格式化模式,日期列 ...

  7. P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles

    P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles 这个题吧,之前学DP的时候就做过一次了,其实还是挺简单的,如果一步一步按照找状态定义,找边界条件,找转移 ...

  8. Python爬虫之利用BeautifulSoup爬取豆瓣小说(一)——设置代理IP

    自己写了一个爬虫爬取豆瓣小说,后来为了应对请求不到数据,增加了请求的头部信息headers,为了应对豆瓣服务器的反爬虫机制:防止请求频率过快而造成“403 forbidden”,乃至封禁本机ip的情况 ...

  9. 从AD域获取用户AD信息

    public static Dictionary<string, string> SearchADInfo(string adName) { string strTemp = " ...

  10. 面试题42:翻转单词顺序VS左旋转字符串

    题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理. 例如输入字符串“I am a student.",则输出"stud ...