动态顺序表

来源:互联网 发布:dive into python pdf 编辑:程序博客网 时间:2024/06/04 20:12
//动态顺序表//引用库函数 #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--;   }    } 
0 0