//----------------------------线性表的动态分配顺序存储结构-------------------------
# include "stdio.h"
# include "malloc.h"
# include "stdlib.h"
# define M 5              //线性表存储空间的初始分配量
# define N 2              //线性表存储空间的分配增量
typedef struct {
    int *elem;            //存储空间基址
    int length;            //当前长度
    int listsize;          //当前分配的存储容量(以sizeof(int)为单位)
}SqList;
int InitList(SqList *L) {  // 构造一个空的线性表L
    L->elem=(int *)malloc(M*sizeof(int));
    if(!L->elem)          // 存储分配失败
        exit(-2);
    L->length=0;          // 空表长度为0
    L->listsize=M;        // 初始存储容量
    return 1;
}
int IntPut(SqList *L) {    //输入数据
    int i,e;
    printf ("请输入你要输入数据的个数:\n");
    scanf ("%d",&e);
    if (1>e||5<e) {        //判断输入数据的个数是否合格,若不合格请重新输入
        do{
            printf ("你输入的数据有误!请重新输入:\n");
            scanf ("%d",&e);
        }while(1>e||5<e);
    }
    printf ("输入正确!\n请开始输入数据并用空格隔开:\n");
    for (i=0;i<e;i++) {    //开始输入数据
        scanf ("%d",&L->elem[i]);
        L->length=L->length+1;
    }
    return 1;
}
int OutPut(SqList *L) {    //输出数据
    int i;
    for (i=0;i<L->length;i++) {
        printf ("%d",L->elem[i]);
        printf ("\n");
    }
    return 1;
}
int Find(SqList *L) {              //在顺序线性表L中查第i个值,若到,则打印出对应的值
    int i;
    printf ("请输入你要查的数据序号:\n");
    scanf ("%d",&i);
    if (1>i||L->length<i) {        //判断输入的序号是否合格,若不合格请重新输入
        do{
            printf ("你输入的数据有误!请重新输入:\n");
            scanf ("%d",&i);
        }while(1>i||L->length<i);
    }
    printf ("输入的序号正确!\n你输入的序号所对应的数据是:\n");
    printf ("%d\n",L->elem[i-1]);  //打印出对应的值
    return 0;
}
int ListInsert(SqList *L) {          // 在顺序线性表L的第i个元素之前插入新的元素e,
                                    // i的合法值为1≤i≤ListLength(L)+1
    int *y,*q,*p,i,e;
    printf ("请输入你要插入的数据序号:\n");
    scanf ("%d",&i);
    if (1>i||(L->length+1)<i) {      // 判断输入的序号是否合格,若不合格请重新输入
        do{
            printf ("你输入的数据有误!请重新输入:\n");
            scanf ("%d",&i);
        }while(1>i||(L->length+1)<i);
    }
    printf ("输入的序号正确!\n请输入你要插入的数据:\n");
    scanf ("%d",&e);
    if(L->length>=L->listsize) {    // 当前存储空间已满,增加容量
        y=(int *)realloc(L->elem,(L->listsize+N)*sizeof(int));
        if(!y)                      // 存储分配失败
            exit(-2);
        L->elem=y;                  // 新基址
        L->listsize+=N;            // 增加存储容量
    }
    q=&(L->elem[i-1]);              // q为插入位置
    for(p=&(L->elem[L->length-1]);p>=q;--p)  // 插入位置及之后的元素右移
c语言listinsert函数
        *(p+1)=*p;   
    if(L->length>6){
        printf ("插入失败,线性表L已满!\n");
        return 1;
    }
    *q=e;                          // 插入e 
    ++L->length;                  // 表长增1
    return 1;
}
int ListDelete(SqList *L,int &e) {    // 在顺序线性表L中删除第i个元素,并用e返回其值。
                                      // i的合法值为1≤i≤ListLength(L)
    int *p,*q,i;
    printf ("请输入你要删除的数据序号:\n");
    scanf ("%d",&i);
    if (1>i||L->length<i) {          // 判断输入的序号是否合格,若不合格请重新输入
        do{
            printf ("你输入的数据有误!请重新输入:\n");
            scanf ("%d",&i);
        }while(1>i||L->length<i);
    }
    printf ("输入的序号正确!\n");
    p=&(L->elem[i-1]);              // p为被删除元素的位置
    e=*p;                            // 被删除元素的值赋给e
    q=L->elem+L->length-1;          // 表尾元素的位置
    for(++p;p<=q;++p)                // 被删除元素之后的元素左移
        *(p-1)=*p;
    --L->length;                    // 表长减1
    return 1;
}
void menu() {                      //菜单
    system("cls");
    printf ("\t|===========================================================|\t\n");
    printf ("\t|                                                          |\t\n");
    printf ("\t|                  线性表的顺序表示与实现                  |\t\n");
    printf ("\t|                                                          |\t\n");
    printf ("\t|===========================================================|\t\n");
      printf ("\n\t 【1】 建立线性表! \t\t\t【2】 输入数据!\n");
      printf ("\n\t 【3】 输出数据! \t\t\t【4】 查!\n");
    printf ("\n\t 【5】 插入!\t\t\t\t【6】 删除!\n");
      printf ("\n\t 【0】 退出程序!\n");
}
int main () {                                        //主函数
    int i,e;
    SqList L;
    system("color 9F");
    while(1) {
        menu();
        printf ("\n\n\t\t\t请输入的你的选择:");      //输入选择的功能序号
        scanf ("%d",&i);
        switch(i) {
            case 1:                                  //建立线性表
                InitList(&L);
                printf ("构建一个空线性表完毕!\n");
                system("pause");
                break;
            case 2:                                  //输入数据
                IntPut(&L);
                system("pause");
                break;
            case 3:                                  //输出数据
                printf ("你输入的数据如下:\n");
                OutPut(&L);
                system("pause");
                break;
            case 4:                                  //查

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。