线性表的顺序存储结构
Posted 雷八天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性表的顺序存储结构相关的知识,希望对你有一定的参考价值。
(严蔚敏的课本代码准确的来说应该是基于c++的; 目测就我观察而言,c语言实现不了引用的编译 此处所传的参数均为形参类型&形参名)
- 线性结构:
- 有唯一的一个第一个元素
- 唯一的一个最后一个元素
- 除第一个元素,每个元素有且只有一个直接前驱
- 出最后一个元素,每个元素有且只有一个后继
- 线性表:n个数据的有限序列
- 线性表的顺序结构:用一个连续的物理存储空间依次存储线性表中的n个元素
- 线性表顺序结构为什么要用数组进行表示:数组和线性表具有相同的随机存取的特性,即只需要知道第一个元素的位置
typedef struct int * elem; int length; int listsize; SeqList; /*线性表的顺序存储结构*/
#include <stdio.h>; #include <stdlib.h>; #include "SeqList.h"; Status ListInit_Seq(SeqList & L) //初始化一个空的线性表 //动态分配线性表的内存 L.elem = (int *)malloc(LIST_INTI_SIZE * sizeof(int)); if (!L.elem) exit(0); //设置初始线性表元素的个数 L.length = 0; //设置初始化线性表的内存容量(一个数据所占用的内存作为单位) L .listsize = LIST_INTI_SIZE; Status ListInsert_Seq(SeqList * L , int i , int e) //插入索引值为中文索引 //数组索引值为引文索引 //插入位置1-length+1 if (i < 1 || i > (*L).length + 1) return ERROR; //判断当前线性表的存储空间是否满 if ((*L).length >= (*L).listsize) (*L).elem = (int *)realloc((*L).elem, LISTINCREASE * sizeof(int)); if (!(*L).elem) exit(0); (*L).listsize += LISTINCREASE; //执行插入操作 for (int j = (*L).length; j >= i - 1; j--) (*L).elem[j + 1] = (*L).elem[j]; (*L).elem[i - 1] = e; (*L).length++; return OK; Status ListDelete_Seq(SeqList & L , int i, int & e) //删除位置为1-length if (i < 1 || i > L.length) return ERROR; //执行删除操作 e = L.elem[i - 1]; for (int j = i; j < L.length; j++) L.elem[j - 1] = L.elem[j]; L.length--; return OK; Status ListOut_Seq(SeqList L) for (int i = 0; i < L.length; i++) printf("%d ", L.elem[i]); printf("\\n"); return OK; int main() SeqList L; //初始化线性表 ListInit_Seq(L); //插入元素0-9 for (int i = 0; i < 10; i++) ListInsert_Seq(&L, i+1, i); ListOut_Seq(L); //删除第1个元素 int e; ListDelete_Seq(L, 1, e); ListOut_Seq(L); printf("%d",e); system("pause");
以上是关于线性表的顺序存储结构的主要内容,如果未能解决你的问题,请参考以下文章