C语言数据结构_动态顺序表实例分析

编写一个程序,动态的创建一个顺序表。要求:顺序表初始长度为10,向顺序表中输入15个整数,并打印出来;再删除顺序表中的第5个元素,打印出删除后的结果。

#include "stdio.h"
#include "conio.h"
#define MaxSize 10
typedef int ElemType ;      //将int定义为ElemType

typedef struct {
    int *elem;
    int length;
    int listsize;
} Sqlist;

//初始化一个顺序表
//参数L: Sqlist类型的指针
void initSqlist(Sqlist *L){
    L->elem=(int *)malloc(MaxSize*sizeof(ElemType));
    if(!L->elem) exit(0);
    L->length = 0;
    L->listsize = MaxSize;
}

//向顺序表中插入元素
//参数L:Sqlist类型的指针
//参数i:插入元素的位置
//参数item:插入的元素
void InsertElem(Sqlist *L, int i, ElemType item){
    //向顺序表L中第i个位置上插入元素item
    ElemType *base, * insertPtr. *p;
    if(i<1 || i>L->length+1) exit(0);
    if(L->length>= L->listsize)
    {
        base = (ElemType*)realloc(L->elem, (L->listsize+10)*sizeof(ElemType));
        L->elem=base;
    L->listsize=L->listsize+100;
    }
    insertPtr=&(L->elem[i-1]);
    for(p=&(L->elem[L->length-1]); p>= insertPtr; p--)
        *(p+1)=*p;
    *insertPtr=item;
    L->length++;
}


//从顺序表中删除元素
//参数L:Sqlist类型的指针
//参数i:删除元素的位置
void DelElem(Sqlist *L, int i) {
    //从顺序表L中删除第i个元素
    ElemType *delItem, *q;
    if(i<1 || i>L->length) exit(0);
    delItem=&(L->elem[i-1]);
    q=L->elem+L->length-1;
    for(++delItem; delItem<=q; ++delItem)*( delItem-1) =* delItem;
    L->length--;
}

//测试函数
main()
{
    Sqlist l;
    int i;
    initSqlist(&l);     //初始化一个顺序表
    for(i=0; i<15; i++)
        InsertElem(&l, i+1, i+1);       //向顺序表中插入1^15
    printf("\nThe content of the list is\n");
    for(i=0; i<l.length; i++)
        printf("%d ", l.elem[i]);       //打印出顺序表中的内容
    DelElem(&l, 5);        //删除第5个元素,即5
    printf("\nDelete the fifth element\n");
    for(i=0; i<l.length; i++)       //打印出删除后的结果
        printf("%d ", l.elem[i]);
    getche();
}
上一篇:全排列的非递归程序(使用栈)--C++程序


下一篇:Python-算法扩展:bisect模块