栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

<数据结构>动态分配内存的顺序表实现(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

<数据结构>动态分配内存的顺序表实现(C语言)

#include 
#include 
#include 
#define InitSize 15

typedef struct {

   int *data;
   int MaxSize,length;
}SeqList;




int InitSeqList(SeqList *L){
    L->data=(int *)malloc(sizeof(int)*InitSize);
    if(!L->data)return 0;
    L->length=0;
    L->MaxSize=InitSize;
    printf("该顺序表已被创建nn");
    return 1;
}

int DestroyLIst(SeqList *L){//因为此处采用了顺序表的动态内存分配所以要使用malloc()和free()函数成对申请和销毁内存空间
    if(!L)return 0;

    else {free(L->data);printf("该顺序表已销毁nn");}
    return 1;
}



int ListInsert(SeqList *L,int i,int e){//i 的取值有n+1种 即n=L,leng  问题规模即当前表长;
                                        //最好循环语句执行次数 当i=length+1 第一次for循环判定j=L-L->length+1)
        return 0;//顺序表的插入操作i的合法取值为1到L.length+1
    if(L->length>=InitSize)return 0;


    int j=L->length;
    int times=0;//times 用以记录循环语句执行次数
    for(;j>=i;j--){
        L->data[j]=L->data[j-1];times++;}
    L->data[i-1]=e;
    L->length++;
    printf("向顺序表位置:%d插入元素:%d成功n循环执行:%d次nn",i,e,times);
    return 1;

    }

int ListDelete(SeqList *L,int i,int *e){ //i的取值有n种 即n=L.length 问题规模即当前表长
    if(!L)                               //最好循环语句执行次数 当i=length 第一次for循环判定j=L-length-1 共n-1次 T(n)=O(n-1)=O(n);
    if(i<1||i>L->length)               //平均时间复杂度 E(T(n))=(  1/n  )*(0+2+3+...+n-1)=(  1/n  )*(0 + n-1)*(n)/2=(n-1)/2=O(n)
       return 0;
    int j=i;
    int times=0;//times 用以记录循环语句执行次数
    (*e)=L->data[i-1];
    for(;jlength;j++)
        L->data[j-1]=L->data[j];
    L->length--;
    printf("向顺序表位置:%d删除元素:%d成功n循环执行:%d次nn",i,(*e),times);

    return 1;


}

void PrintList(SeqList *L){
    for(int i=0;ilength;i++)
        printf("该顺序表中第%d个元素%dn",i+1,L->data[i]);

}


int GetElem(SeqList *L,int i){//顺序表具有随机存取的特点 在 O(1)的时间复杂度下可以实现按位存取

    if(i<1||i>L->length)
        return 0;
    return (L->data[i-1]);




}

int LocatElem(SeqList L,int e){//此时for循环语句的执行次数和顺序表内元素值相关
   if(L.length==0)return 0;   //最好时间复杂度 当第1位元素恰为按值查找时循环语句执行次数为:1 O(n)=1
   int i=0;                   //最坏时间复杂度  当查找元素为最后一位元素或者不存在时 执行次数为:n O(n)=n
   for(;iprintf("已在该顺序表中找到第:%d位元素:%dn",i+1,e);break;}


   return i;

}


int main()
{

    SeqList L;

    int discard;
    int desert;

    InitSeqList(&L);

    ListInsert(&L,1,7);
    ListInsert(&L,1,7);
    ListInsert(&L,1,2);
    ListInsert(&L,1,5);
    ListInsert(&L,1,9);
    ListInsert(&L,1,9);

    PrintList(&L);

    ListDelete(&L,1,&discard);
    ListDelete(&L,5,&desert);

    PrintList(&L);
    printf("n顺序表第1个节点数据为%dnn",GetElem(&L,1));
    if(!LocatElem(L,9))printf("顺序表按值查找失败nn");
    if(!LocatElem(L,9527))printf("顺序表按值查找失败n");

    DestroyLIst(&L);
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976368.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号