C 语言描述顺序表

  • 静态顺序表
#include <stdio.h>

#define MaxSize 10
/*静态顺序表的各种操作*/

/**   向顺序表中插入元素    */
/**   参数Sqlist:表首地址    */
/**   参数*len: 表的长度     */
/**   参数i: 插入元素的位置 */
/**   参数x:待插入的元素值  */
void insertElem(int Sqlist[],int *len,int i,int x) {
    int t;
    if(*len==MaxSize || i<1 || i>*len+1) {
        printf("This insert is illegal\n");
        return;
    }                                      /*非法插入*/
    for(t=*len-1; t>=i-1; t--) {
        Sqlist[t+1]=Sqlist[t];
    }
    Sqlist[i-1]=x;                           /*插入元素*/
    *len=*len+1;                          /*表长加1*/
}

/**   向顺序表中删除元素    */
/**   参数Sqlist:表首地址    */
/**   参数*len: 表的长度     */
/**   参数i: 插入元素的位置 */
void DelElem(int Sqlist[],int *len,int i) {
    int j;
    if(i<1 || i>*len) {
        printf("This insert is illegal\n");
        return;
    }                                    /*非法插入*/
    for(j=i; j<=*len-1; j++) {
        Sqlist[j-1]=Sqlist[j];         /*将第i个元素之后的元素前移*/
    }
    *len=*len-1;                          /*表长减1*/
}

/**测试函数*/
int main(int argc,char *argv[] ) {
    /*按照题目要求进行测试*/
    int Sqlist[MaxSize];                   /*定义一个静态顺序表*/
    int len;
    int i;
    printf("Please input six integer number\n");
    for(i=0; i<6; i++) {
        scanf("%d",&Sqlist[i]);          /*从键盘输入6个整数*/
    }
    len=6;
    for(i=0; i<len; i++) {
        printf("%d ",Sqlist[i]);     /*输出顺序表中的6个整数*/
    }
    printf("\nThe spare length is %d\n",MaxSize - len);    /*显示表中的剩余空间*/
    insertElem(Sqlist,&len,3,0);          /*在表中第3位置插入整数0*/
    for(i=0; i<len; i++)
        printf("%d ",Sqlist[i]);            /*输出顺序表中的所有元素*/
    printf("\nThe spare length is %d\n",MaxSize - len);   /*显示表中的剩余空间*/
    insertElem(Sqlist,&len,11,0);            /*在表中第11位置插入整数0*/
    DelElem(Sqlist,&len,6);              /*删除顺序表中的第6个元素*/
    for(i=0; i<len; i++)
        printf("%d ",Sqlist[i]);            /*输出顺序表中的所有元素*/
    printf("\nThe spare length is %d\n",MaxSize - len);     /*显示表中的剩余空间*/
    //getche();
    return 0;
}
  • 动态顺序表

#include <stdio.h>
#include <stdlib.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--;
}

/** 测试函数 */
int main(int argc,char *argv[] ) {
    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]);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值