Welcome 微信登录

首页 / 软件开发 / C语言

链表的建立、插入和删除

链表的建立、插入和删除

链表的建立、插入和删除2007-05-03数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性。但数组也同样存在一些弊病。如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中针对不同问题有时需要3 0个大小的数组,有时需要5 0个数组的大小,难于统一。我们只能够根据可能的最大需求来定义数组,常常会造成一定存储空间的浪费。我们希望构造动态的数组,随时可以调整数组的大小,以满足不同问题的需要。链表就是我们需要的动态...
链表的c语言实现(一)

链表的c语言实现(一)

链表的c语言实现(一)2007-05-03准备:动态内存分配一、为什么用动态内存分配但我们未学习链表的时候,如果要存储数量比较多的同类型或同结构的数据的时候,总是使用一个数组。比如说我们要存储一个班级学生的某科分数,总是定义一个float型(存在0.5分)数组:float score[30];但是,在使用数组的时候,总有一个问题困扰着我们:数组应该有多大?在很多的情况下,你并不能确定要使用多大的数组,比如上例,你可能并不知道该班级的学生的人数,那么你就要把...
链表的c语言实现(二)

链表的c语言实现(二)

链表的c语言实现(二)2007-05-03一、单链表的建立有了动态内存分配的基础,要实现链表就不难了。所谓链表,就是用一组任意的存储单元存储线性表元素的一种数据结构。链表又分为单链表、双向链表和循环链表等。我们先讲讲单链表。所谓单链表,是指数据接点是单向排列的。一个单链表结点,其结构类型分为两部分:1、数据域:用来存储本身数据2、链域或称为指针域:用来存储下一个结点地址或者说指向其直接后继的指针。例:typedef struct node{char nam...
链表的c语言实现(三)

链表的c语言实现(三)

链表的c语言实现(三)2007-05-03二、单链表的基本运算建立了一个单链表之后,如果要进行一些如插入、删除等操作该怎么办?所以还须掌握一些单链表的基本算法,来实现这些操作。单链表的基本运算包括:查找、插入和删除。下面我们就一一介绍这三种基本运算的算法,并结合我们建立单链表的例子写出相应的程序。1、查找对单链表进行查找的思路为:对单链表的结点依次扫描,检测其数据域是否是我们所要查好的值,若是返回该结点的指针,否则返回NULL。因为在单链表的链域中包含了后...
链表的c语言实现(四)

链表的c语言实现(四)

链表的c语言实现(四)2007-05-032、插入(后插)假设在一个单链表中存在2个连续结点p、q(其中p为q的直接前驱),若我们需要在p、q之间插入一个新结点s,那么我们必须先为s分配空间并赋值,然后使p的链域存储s的地址,s的链域存储q的地址即可。(p->link=s;s->link=q),这样就完成了插入操作。下例是应用插入算法的一个例子:#include <stdio.h>#include <malloc.h>#...
链表的c语言实现(六)

链表的c语言实现(六)

链表的c语言实现(六)2007-05-03一、循环链表循环链表是与单链表一样,是一种链式的存储结构,所不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链。循环链表的运算与单链表的运算基本一致。所不同的有以下几点:1、在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为NULL。此种情况还使用于在最后一个结点后插入一个新的结点。 2、在判断是否到表尾时,是判断该结点链域的值是否...
链表的c语言实现(七)

链表的c语言实现(七)

链表的c语言实现(七)2007-05-03双向链表的基本运算:1、查找假若我们要在一个带表头的双向循环链表中查找数据域为一特定值的某个结点时,我们同样从表头结点往后依次比较各结点数据域的值,若正是该特定值,则返回指向结点的指针,否则继续往后查,直到表尾。下例就是应用双向循环链表查找算法的一个程序。#include <stdio.h>#include <malloc.h>#define N 10typedef struct node{...
链表的c语言实现(八)

链表的c语言实现(八)

链表的c语言实现(八)2007-05-032、插入对于双向循环链表,我们现在可以随意地在某已知结点p前或者p后插入一个新的结点。假若s,p,q是连续三个结点的指针,若我们要在p前插入一个新结点r,则只需把s的右链域指针指向r,r的左链域指针指向s,r的右链域指针指向p,p的左链域指针指向r即可。在p,q之间插入原理也一样。下面就是一个应用双向循环链表插入算法的例子:#include <stdio.h>#include <malloc.h&...
链表的c语言实现(九)

链表的c语言实现(九)

链表的c语言实现(九)2007-05-033、删除删除某个结点,其实就是插入某个结点的逆操作。还是对于双向循环链表,要在连续的三个结点s,p,q中删除p结点,只需把s的右链域指针指向q,q的左链域指针指向s,并收回p结点就完成了。下面就是一个应用双向循环链表删除算法的例子:#include #include #include #define N 10 typedef struct node{char name[20];struct node *llink,...
结构体类型变量的定义和引用

结构体类型变量的定义和引用

结构体类型变量的定义和引用2007-05-03前面的课程我们学习了一些简单数据类型(整型、实型、字符型)的定义和应用,还学习了数组(一维、二维)的定义和应用,这些数据类型的特点是:当定义某一特定数据类型,就限定该类型变量的存储特性和取值范围。对简单数据类型来说,既可以定义单个的变量,也可以定义数组。而数组的全部元素都具有相同的数据类型,或者说是相同数据类型的一个集合。在日常生活中,我们常会遇到一些需要填写的登记表,如住宿表、成绩表、通讯地址等。在这些表中,...
结构体数组的定义和引用(一)

结构体数组的定义和引用(一)

结构体数组的定义和引用(一)2007-05-03单个的结构体类型变量在解决实际问题时作用不大,一般是以结构体类型数组的形式出现。结构体类型数组的定义形式为:struct stu / *定义学生结构体类型* /{char name[20]; / *学生姓名* /char sex; / *性别* /long num; / *学号* /float score[3]; / *三科考试成绩* /};struct stu stud[20]; 定/*义结构体类型数组st...
结构体数组的定义和引用(四)

结构体数组的定义和引用(四)

结构体数组的定义和引用(四)2007-05-03指针变量非常灵活方便,可以指向任一类型的变量,若定义指针变量指向结构体类型变量,则可以通过指针来引用结构体类型变量。7.3.1 指向结构体类型变量的使用首先让我们定义结构体:struct stu{char name[20];long number;float score[4];} ;再定义指向结构体类型变量的指针变量:struct stu *p1, *p2 ;定义指针变量p 1、p 2,分别指向结构体类型变量...
结构体数组的定义和引用(五)

结构体数组的定义和引用(五)

结构体数组的定义和引用(五)2007-05-032)指针法若p指向数组的某一个元素,则p++就指向其后续元素。3)指针的数组表示法若p=student,我们说指针p指向数组student,p[i]表示数组的第i个元素,其效果与student[i]等同。对数组成员的引用描述为:p[i].name、p[i].num等。[例7-4]指向结构体数组的指针变量的使用。structdata/*定义结构体类型*/{intday,month,year;};structst...
指针数组(一)

指针数组(一)

指针数组(一)2007-05-03前面介绍了指向不同类型变量的指针的定义和使用,我们可以让指针指向某类变量,并替代该变量在程序中使用;我们也可以让指针指向一维、二维数组或字符数组,来替代这些数组在程序中使用,给我们在编程时带来许多方便。下面我们定义一种特殊的数组,这类数组存放的全部是指针,分别用于指向某类的变量,以替代这些变量在程序中的使用,增加灵活性。指针数组定义形式:类型标识 *数组名[数组长度]例如: char *str[4];由于[ ] 比*优先权...
指针数组(二)

指针数组(二)

指针数组(二)2007-05-03[例6-25] 对已排好序的字符指针数组进行指定字符串的查找。字符串按字典顺序排列,查找算法采用二分法,或称为折半查找。折半查找算法描述:1.设按开序(或降序)输入n个字符串到一个指针数组。2.设low指向指针数组的低端,high指向指针数组的高端,mid=(low+high)/23.测试mid所指的字符串,是否为要找的字符串。4.若按字典顺序,mid所指的字符串大于要查找的串,表示被查字符串在low和mid之间,否则,表...
<< 1 2 3 4 5 6 7 8 9 10 >>