动态顺序表

//动态顺序表

//引用库函数 
#include  <stdio.h>
#include <stdlib.h> 

//宏定义
#define  List_init_size 4
#define  List_add_size 2
#define OVERFLOW -2  

typedef int     Elemtype;  //   Elemtype元素类型 
//定义结构体
typedef struct{
    Elemtype *elem;   //存储空间首地址(基址) 
    int  length;
    int Listsize;   //当前分配的存储容量 
}SqList;   //结构体名 

//函数声明
void InitList(SqList *l); //构造一个空的顺序表
void ListInsert(SqList *l,int i,int a);   //顺序表的增加元素 
void ListDelete(SqList *l,int i);  //顺序表的删除元素 
void ListPrintf(SqList *l);

#include <stdio.h>
int main()
{
     SqList l;
     InitList(&l);

     ListInsert(&l,1,15);
     ListInsert(&l,1,16);
     ListInsert(&l,1,20);
     ListInsert(&l,1,30);
     ListInsert(&l,2,45);

      ListPrintf(&l); 
     ListDelete(&l,1);
      ListPrintf(&l); 

    return 0;
}
void ListPrintf(SqList *l)
{
    printf("打印出list如下:\n");
    for(int i=0;i<l->length;i++)
    {
        printf("%d ",l->elem[i]);
    }
        printf("list长度为:%d\n",l->length);
} 

    //构造一个空的顺序表
void InitList(SqList *l)
{
    l->elem =(Elemtype *)malloc(List_init_size*sizeof(Elemtype));
    if(!l->elem)exit (OVERFLOW);  //存储分配失败
    l->length =0;
    l->Listsize =List_init_size; 
}

//顺序表的增加元素 
void ListInsert(SqList *l,int i,int a)
{
    //这里插入的位置i 意思为插在 i 之前的一个位置 
    if(i<1 || i>l->length+1) printf("你要插入的位置不合法!.....插入失败!\n");
    else{
        if(l->length >= l->Listsize)
    {
        printf("到这里增加了存储空间!");
        Elemtype *newbase;//分配一个临时基址  
        newbase=(Elemtype *)realloc(l->elem,(List_init_size+List_add_size)*sizeof(Elemtype));  
        if(!newbase) exit(OVERFLOW);
        l->elem=newbase;
        l->Listsize += List_add_size;
    }
    if(l->length!=0)
    {
         for(int j=l->length-1;j>=i-1;j--)   //第I个元素及之后的元素后移一位(从数组尾部开始移) 
         {
                l->elem[j+1] =l->elem[j];
         }
    }
   l->elem[i-1]=a;
   l->length++;
    printf(""); 
    ListPrintf(l); 
    } 

}

//顺序表的删除元素 
void ListDelete(SqList *l,int i)
{
        if(l->length == 0) printf("空表,没有元素可以删除!\n");

        else if(i<0|| i>=l->length) printf("你要删除的位置不合法!.....删除失败!\n");
    else{
    for(int j=i;j<l->length;j++)
        {
            l->elem[j]=l->elem[j+1];
        }
        l->length--;
   }    
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值