C语言实现动态顺序表

纯C语言实现动态顺序表

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
#define InitSize 100
typedef int ElemType;
typedef struct{
    ElemType *data; //存储空间基地址
    int length; //当前长度
    int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)

}SqList;


int LocateElem(SqList &L,ElemType &e)
{
    int i;
    for(i=0;i<L.length;i++)
        if(L.data[i]==e)
            return i+1;
    return 0;
}


bool InitList(SqList &L){    

    L.data = (ElemType *)malloc(InitSize*sizeof(ElemType));
    if (!L.data)
        return false; //内存分配失败  
       L.data[5]=100;
    L.length = 7; 
    L.listsize = InitSize; 
    printf("初始化成功!\n");
    return true;        
}


bool ListInsert(SqList &L,int i,ElemType e)
{
    if((L.length+1>MaxSize)||(i>MaxSize-1)||(i<0)||(i>L.length))
    {
        printf("插入失败\n");
        return false;
    }

    if(L.length==0)
    {
        L.data[0]=e;
        L.length++;
    }else{
        for(int j=L.length;j>=i;j--)
            L.data[j] = L.data[j-1];
        L.data[i-1]=e;
        L.length++;
    }
    return true;
}


bool ListDelete(SqList &L,int i,ElemType &e)
{
    if((i>MaxSize-1)||(i<0)||(i>L.length))
    {
        printf("删除失败\n");
        return false;
    } 

    e=L.data[i-1];
    for(int j=i;j<L.length;j++){
        L.data[j-1]=L.data[j];
    L.length--;
    return true;
    }
}


int main()
{
    int i,e;
    ElemType c;
    SqList *L = (SqList*)malloc(sizeof(SqList));//创建顺序表 
    SqList temp = *L;
    InitList(temp);


    printf("当前的顺序表为:\n");
    for(i=0;i<temp.length;i++)
    {
        printf("data[%d]=%d\n",i,temp.data[i]);
    }
    printf("顺序表的长度为:%d\n",temp.length);

    printf("1)按值查找:\n"); 
    printf("请输入查询的数据元素值(默认为100):");
    scanf("%dn",&i);
    printf("查询到值为%d的位序是:%d\n",i,LocateElem(temp,i));


    printf("2)顺序表插入:\n"); 
    printf("请输入插入位置i:");
    scanf("%d",&i);
    if(i>=0){
            printf("请输入插入值e:");
            scanf("%d",&e);
            if(e!=0)
                {
                    if(ListInsert(temp,i,e))
                    {
                        printf("插入成功,插入数据元素%d到第%d位置\n",e,i);
                    }    
                }    

            }


    printf("插入完毕,打印顺序表:\n");

    for(i=0;i<temp.length;i++)
    {
        printf("data[%d]=%d\n",i,temp.data[i]);
    }
    printf("顺序表的长度为:%d\n",temp.length);


    printf("3)顺序表删除:\n"); 
    printf("请输入删除的位置i:");
    scanf("%dn",&i);
    if(i>=0){
         if(ListDelete(temp,i,c))
                    {
                        printf("第%d位置的元素值为%d已经删除!\n",i,c);
                    }    
            }

    printf("删除完毕,打印顺序表:\n");
    for(i=0;i<temp.length;i++)
    {
        printf("data[%d]=%d\n",i,temp.data[i]);
    }
    printf("顺序表的长度为:%d\n",temp.length);

    return 0;
}
/**
Coding By AnCoLin
*/

运行结果如图:

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

标签:

分享到:

扫一扫在手机阅读

扫一扫 在手机阅读、分享本文

上一篇: 下一篇:

精彩评论

全部回复1人评论679 views人参与
  1. 1楼
    塑胶跑道

    非常详细,好文章

    2018-08-23 11:32:18 回复

电子邮件地址不会被公开。 必填项已用*标注

loading

孤独的渔夫,自闭修炼到白头~

最新评论