线性表的顺序存储结构

    
(严蔚敏的课本代码准确的来说应该是基于c++的;  目测就我观察而言,c语言实现不了引用的编译 此处所传的参数均为形参类型&形参名)

  •     线性结构:



有唯一的一个第一个元素
唯一的一个最后一个元素
除第一个元素,每个元素有且只有一个直接前驱
出最后一个元素,每个元素有且只有一个后继

  •     线性表:n个数据的有限序列
  •     线性表的顺序结构:用一个连续的物理存储空间依次存储线性表中的n个元素
  •     线性表顺序结构为什么要用数组进行表示:数组和线性表具有相同的随机存取的特性,即只需要知道第一个元素的位置


    后面元素位置等于Loc(a1)+ (K-1)*l /*线性表的顺序存储结构*/ #define LIST_INTI_SIZE 100 #define LISTINCREASE 10 #define ERROR 0 #define OK 1 typedef int Status;

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

点赞