123从顺序表中删除元素 下面介绍如何删除长度为n的顺序表中的第个位置的元 素 所谓删除长度为n的顺序表中的第个位置的元素,就是 指将顺序表第个位置上的元素去掉。 函数 Delelem的作用是从顺序表 Sqlist中删除第个位置 的元素,并将表的长度值减1。其实现过程如下 (1)判断要删除的元素是否合法。对于一个长度为n的 顺序表,删除元素的合法位置是1~n,因此如果i<1或者i>n都 是不合法的。 (2)将顺序表的第位置以后的元素依次前移,这样就 将第i个元素覆盖掉了,也就起到删除第个位置元素的作用。 (3)最后将表长减1
1.2.3 从顺序表中删除元素 下面介绍如何删除长度为n的顺序表中的第i个位置的元 素。 所谓删除长度为n的顺序表中的第i个位置的元素,就是 指将顺序表第i个位置上的元素去掉。 函数DelElem的作用是从顺序表Sqlist中删除第i个位置 的元素,并将表的长度值减1。其实现过程如下。 (1)判断要删除的元素是否合法。对于一个长度为n的 顺序表,删除元素的合法位置是1~n,因此如果i<1或者i>n都 是不合法的。 (2)将顺序表的第i位置以后的元素依次前移,这样就 将第i个元素覆盖掉了,也就起到删除第i个位置元素的作用。 (3)最后将表长减1
124实例与分析 前面介绍了静态顺序表和动态顺序表的定义,创建, 插入元素,删除元素等方法。下面通过具体的实例巩固学到 的知识。 【实例1-1】创建一个静态的顺序表存放整数,大小为 10,完成以下的操作: (1)输入6个整数,打印出顺序表中的内容,并显示 表中剩余的空间个数。 (2)在顺序表中的第3个位置插入元素0,打印出顺序 表中的内容,并显示表中剩余的空间个数。 (3)再试图插入表中第11个位置整数0,程序提示超 出范围 (4)删除表中第6个元素,打印出顺序表中的内容, 并显示表中剩余的空间个数
1.2.4 实例与分析 前面介绍了静态顺序表和动态顺序表的定义,创建, 插入元素,删除元素等方法。下面通过具体的实例巩固学到 的知识。 【实例1-1】创建一个静态的顺序表存放整数,大小为 10,完成以下的操作: (1)输入6个整数,打印出顺序表中的内容,并显示 表中剩余的空间个数。 (2)在顺序表中的第3个位置插入元素0,打印出顺序 表中的内容,并显示表中剩余的空间个数。 (3)再试图插入表中第11个位置整数0,程序提示超 出范围 (4)删除表中第6个元素,打印出顺序表中的内容, 并显示表中剩余的空间个数
13链表 与顺序表相同,链表也是一种线性表,它的数据的逻 辑组织形式是一维的。而与顺序表不同的是,链表的物理存 储结构是用一组地址任意的存储单元存储数据的。也就是说 它不像顺序表那样占据一段连续的内存空间,而是将存储 单元分散在内存的任意地址上。在链表结构中,存储的每个 数据元素记录都存放到幢淼囊桓鼋岬悖node)中,而每个 结点之间由指针将其连接在一起,这样就形成了一条如同“ 链”的结构。 head 1249 1356 1021 1249 B C D 1356 1475 1021 Null
1.3 链表 与顺序表相同,链表也是一种线性表,它的数据的逻 辑组织形式是一维的。而与顺序表不同的是,链表的物理存 储结构是用一组地址任意的存储单元存储数据的。也就是说 ,它不像顺序表那样占据一段连续的内存空间,而是将存储 单元分散在内存的任意地址上。在链表结构中,存储的每个 数据元素记录都存放到幢淼囊桓鼋岬悖node)中,而每个 结点之间由指针将其连接在一起,这样就形成了一条如同“ 链”的结构
13.1创建一个链表 建立一条长度为n的链表的全过程,共分为以下几个步骤。 (1)用 malloc函数在内存的动态存储区中开辟一块大小为 sizeof(( LNode)的空间,并将其地址赋值给 Linklist类型变量p,然 后将数据e存入该结点的数据域data,指针域存放NULL。其中数 据e由函数Get获得。 (2)如果指针变量list为空,说明本次生成的结点为第一个 结点,所以将p赋值给ist,ist是 Linklist类型变量,只用来指向 第一个链表结点,因此它是该链表的头指针,最后要返回。 (3)如果指针变量list不为空,则说明本次生成的结点不是 第一个结点,因此将p赋值给r→neto (4)再将p赋值给r,目的是使r再次指向最后的结点,以便 生成链表的下一个结点,即:保证r永远指向原先链表的最后一个 结点。 (5)最后将生成的链表的头指针ist返回主调函数,通过 ist就可以访问到该链表的每一个结点,并对该链表进行操作
1.3.1 创建一个链表 建立一条长度为n的链表的全过程,共分为以下几个步骤。 (1)用malloc函数在内存的动态存储区中开辟一块大小为 sizeof(LNode)的空间,并将其地址赋值给LinkList类型变量p,然 后将数据e存入该结点的数据域data,指针域存放NULL。其中数 据e由函数Get获得。 (2)如果指针变量list为空,说明本次生成的结点为第一个 结点,所以将p赋值给list,list是LinkList类型变量,只用来指向 第一个链表结点,因此它是该链表的头指针,最后要返回。 (3)如果指针变量list不为空,则说明本次生成的结点不是 第一个结点,因此将p赋值给r->next。 (4)再将p赋值给r,目的是使r再次指向最后的结点,以便 生成链表的下一个结点,即:保证r永远指向原先链表的最后一个 结点。 (5)最后将生成的链表的头指针list返回主调函数,通过 list就可以访问到该链表的每一个结点,并对该链表进行操作
132向链表中插入结点 下面介绍如何在指针q指向的结点后面插入结点。该过 程的步骤如下: (1)先创建一个新结点,并用指针p指向该结点。 (2)将q指向的结点的next域的值(即q的后继结点的 指针)赋值给p指向结点的next域。 (3)将p的值赋值给q的next域
1.3.2 向链表中插入结点 下面介绍如何在指针q指向的结点后面插入结点。该过 程的步骤如下: (1)先创建一个新结点,并用指针p指向该结点。 (2)将q指向的结点的next域的值(即q的后继结点的 指针)赋值给p指向结点的next域。 (3)将p的值赋值给q的next域