线性表,20个同学的学号姓名成绩

1、掌握线性表的定义;
2、掌握线性表的基本操作,如建立、查找、插入和删除等。
实验内容:

试分析并编程实现以下问题:
1、线性表的构造。构造一个含有10名同学元素的顺序表,同学数据可从键盘输入。为了解决顺序表的存储单元,可以参考课本中的顺序表的初始化算法。
相关算法代码如下,可以参考,也可以自己编写程序。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define TURE 1
#define FAUSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 4
typedef int Status;
typedef int ElemType;
typedef struct
{
    ElemType *elem;
    int length;
    int listsize;
}SqList;

Status InitList_Sq(SqList *L) //初始化线性表
{
    L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L->elem)return OVERFLOW;
    L->length=0;
    L->listsize =LIST_INIT_SIZE;
    return OK;
}

Status ListInsert_Sq(SqList *L,int i,ElemType e)//向表中插入元素
{
    ElemType *q,*p,*newbase;
    if(i<1||i>L->length+1)
        return ERROR;
    if(L->length>=L->listsize)//若当前表长>=计划表长则开辟新空间
    {
        newbase=(ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
        if(!newbase)return ERROR;
        L->elem=newbase;
        L->listsize+=LISTINCREMENT;

    }

    q=&(L->elem[i-1]);
    for(p=&(L->elem[L->length-1]);p>=q;p--)*(p+1)=*p;
       *q=e;
       ++L->length;

       return OK;
}

 Status ListDelete_Sq(SqList *L,int i,ElemType *e)//删除表中的元素
 {
     ElemType *p,*q;
     if(i<1||i>L->length+1)return ERROR;
     p=&(L->elem[i-1]);
     *e=*p;
     q=(L->elem+L->length-1);
     for(++p;p<=q;p++)*(p-1)=*p;
     --L->length;
    return OK;
 }
int ListFind(SqList L,int k)
 {
     return L.elem[k-1];
 }
int main()
{
    SqList Lst;
    int i,j,n=10,a,k,p=1;
    ElemType e;
    if(InitList_Sq(&Lst)==OK)
    {
        for(i=1;i<=n;i++)
            if(ListInsert_Sq(&Lst,i,i)!=OK)break;
            printf("原来线性表中的元素为:");
            for(i=0;i<Lst.length;i++)
                printf("%d ",Lst.elem[i]);
                printf("\n");
            while(p)
            {
                printf("1)插入元素2)删除元素3)查找元素4)显示操作结果0)退出\n");
                scanf("%d",&j);
                switch(j)
                {
                    case 1:
                printf("请输入要插入的元素和插入的位置:");
                scanf("%d%d",&a,&k);
                ListInsert_Sq(&Lst,k,a);break;
                    case 2:
                    printf("请输入要删除的位置:");
                scanf("%d",&k);
                ListDelete_Sq(&Lst,k,&e);break;
                    case 3:
                    printf("请输入查找元素的位置:");
                    scanf("%d",&k);
                    printf("位置为%d的元素为%d\n",k,ListFind(Lst,k));
                    case 4:
                for(i=0;i<Lst.length;i++)
                    printf("%d ",Lst.elem[i]);
                    printf("\n");break;
                    case 0:p=0;break;
                }
            }

    }//if
    return 0;
}//main


https://blog.csdn.net/qq_44939000/article/details/103795876