AUSTOj1

以下代码是我根据老师提供的部分源码及自我的认知补充注释

#include<stdio.h> //头文件
#include<malloc.h> //malloc,free,realloc函数头文件
#define MAXSIZE 100 //设线性表初始分配空间大小
typedef int ElemType;  //取别名

//0:定义顺序表的结构类型
typedef struct{  //自定义数据类型,typedef为取名字 struct为自定义数据类型
ElemType *elem;  //element type(“元素的类型”)的简化体,是数据结构中用来抽象的一个概念
int length;  //定义长度
int listsize;  //定义表的空间大小
}SqList; //动态存储分配

//1:初始化顺序表
int InitList_Sq(SqList &L )
{
L.elem=(ElemType*)malloc(sizeof(ElemType)*MAXSIZE); //利用malloc函数动态分配内存
if (!L.elem) return 0;  
L.length=0;
L.listsize=MAXSIZE;
return 1;
}

//2:打印顺序表中所有元素
void PrintList(SqList &L)
{
int i;
for(i=0;i<L.length;i++)
printf("%d\n",L.elem[i]);
}

//*****3:在顺序表中第i个位置(i=1~n)插入元素*****
int ListInsert_Sq(SqList &L,int i,ElemType e){
if (i<1 || i>L.length+1)  //判断顺序表操作是否合法
return 0; 
//--------补充代码--Start------

if(L.length==MAXSIZE) //判断顺序表是否满

return 0;

for(int j=L.length;j>=i-1;j--) //从表尾开始遍历,直到空出一个位置

L.elem[j+1]=L.elem[j]; //将i前面元素后移1位

L.elem[i-1]=e; //此时i-1即为j,将空出来的位置给e

L.length++;
//--------补充代码--End-------
return 1;
}

//*****4:删除顺序表中第i(i=1~n)个元素,用e返回删除的元素*****
int ListDelete_Sq(SqList &L, int i, ElemType &e)
{
//--------补充代码--Start------
if(i<1||i>L.length0)

return 0;

for(j=i;j<=L.length-1;j++) //将i后面的元素都前移1位

L.elem[j-1]==L.elem[j];//挤掉第i个元素

e=L.elem[j];

L.length--;

//--------补充代码--End-------
return 1;
}

//主函数
int main()
{
//以下代码请认真阅读,切勿做任何修改
SqList La;
int i,n,e;

//初始化顺序表
InitList_Sq(La);
//输入元素个数
scanf("%d",&n);
//依次读取n个数据插入顺序表
for(i=1;i<=n;i++)
{
//输入数据元素
scanf("%d",&e);
//插入顺序表
ListInsert_Sq(La,i,e);
}
//按顺序输出顺序表中元素
PrintList(La);

//----------------------------
//输入要删除元素的位置
scanf("%d",&i);
//执行删除
ListDelete_Sq(La,i,e);
//输出删除后的元素
printf("%d\n",e);
//输出删除后的顺序表的内容
PrintList(La);
printf("%d\n",La.length);
return 0;
}

posted @ 2022-09-29 17:25  平凡的柳先生  阅读(83)  评论(0)    收藏  举报