linear list 线性表的 顺序存储形式实现

对顺序存储构造实现线性表查问、插入、删除过程工夫复杂度剖析

插入、删除、按元素值查问推导同理、同后果

按位查问O(1)

基于顺序存储形式实现线性表的代码实现

#include <stdlib.h>#include <stdio.h>#define Elemtype int#define Init_num 20#define Init_cur 10#define Init_value 0//linear list 顺序存储体根本结构(区别于数组形式)//data区域将会取得间断的存储空间,能够间接应用下标拜访(区别于链表,不要看到指针就想到链表)typedef struct {    Elemtype *data;//(仅为了实现动态内存空间的调配应用了指针,而不是用指针拜访)    int current_max_length;    int list_max_length;}linear_list;void initial_list(linear_list &L)//顺序存储构造的初始化办法{    int i = 0;    L.data = (Elemtype*)malloc(sizeof(Elemtype)*Init_num-1);    for (i=0;i<Init_num;i++)    {        L.data[i] = Init_value;    }    //程序表内操作,从零开始计数,所以下标少一个    L.list_max_length = Init_num-1;    L.current_max_length = Init_cur-1;//表征能够被间接操作的最初一个元素的下标}int Located_element(linear_list L,Elemtype value){    for (int i=0;i<=L.current_max_length;i++)    {        if (value == L.data[i])        {            printf("\nsearched element in location %d\n",i+1);            return i;            break;        }    }    printf("\nsearching operation fail,list did not have this element\n");    return -1;//value在程序表中不存在}void delete_element(linear_list &L,int location){    //程序表非空才能够应用删除性能    int temp_loc = location-1;    if(L.current_max_length >= 0)    {        for(temp_loc;temp_loc+1 <= L.current_max_length;temp_loc++)        {            L.data[temp_loc] = L.data[temp_loc+1];        }        L.current_max_length = L.current_max_length-1;        printf("delete operation succeed!\n");        for(int i=0 ;i <= L.current_max_length ; i++)        {            printf("%d ",L.data[i]);        }        printf("\ndone!\n");    }    else     {        printf("delete operation failed,linear list is empty!\n");    }}//销毁操作是对构造体中的Elemtype类型指针所指向的内存空间进行开释,而不是将构造体L整个进行开释void release_list(linear_list &L){    //free操作非空才无效    if(L.data != NULL)    {        free(L.data);        L.data= NULL;        L.current_max_length = -1;        L.list_max_length = -1;        printf("linear list has been released!\n");    }    else     {        printf("pointer is no defeined!\n");    }    }void insert_element(linear_list &L,Elemtype new_element,int location){    //程序表没有多余空位、或者非法输出    location = location -1;//程序表内以0开始计数,线性表逻辑构造中以1开始    if(L.list_max_length == L.current_max_length || location < 0)    {        printf("insert operation fail!\nno extra space\n");    }    else if (L.list_max_length > L.current_max_length)    {        //应答两类状况        //state_1 间接在程序表开端增加        if(location == L.current_max_length+1)        {            L.data[location] = new_element;        }                //state_2 在程序表0-n以内地位插入        else if (location <= L.current_max_length)        {            int end_marke = L.current_max_length;            for(int i=location;i<end_marke;end_marke--)            {                L.data[end_marke] == L.data[end_marke-1];            }            L.data[location] = new_element;        }        printf("linear_list is added one space!\ninsert operation succeed!\n");        L.current_max_length = L.current_max_length + 1;        for(int i=0 ;i <= L.current_max_length ; i++)        {            printf("%d ",L.data[i]);        }    }}int main() {     bool insert = false;    int loc = -2;    linear_list L;    initial_list(L);        for(int i=0 ;i <= L.current_max_length ; i++)    {        printf("%d ",L.data[i]);    }    printf("\ndone!\n");            insert_element(L,5,8);    loc = Located_element(L,5);    delete_element(L,8);    release_list(L);    release_list(L);    return 0;}

程序运行后果示例

代码地址 http://www.dooccn.com/c/#id/6...

程序表物理存储模式示例