/*
烟台大学计算机与控制工程学院
文件名称:lk
作者:尹娜
完成日期:2017年9月18日
问题描述:初始化线性表InitList和插入数据元素ListInsert两个算法
输入描述:无需输入
程序输出:插入到线性表中的元素
*/
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50 //Maxsize将用于后面定义存储空间的大小
typedef int ElemType; //ElemType在不同场合可以根据问题的需要确定,在此取简单的int
typedef struct
{
ElemType data[MaxSize]; //利用了前面MaxSize和ElemType的定义
int length;
} SqList;
//自定义函数声明部分
void DispList(SqList *L) ; //输出线性表DispList(L)
void InitList(SqList *&L); //初始化线性表InitList
void DestroyList(SqList *&L); //销毁线性表DestroyList
bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)
bool ListInsert(SqList *&L,int i,ElemType e); //插入数据元素ListInsert
bool ListDelete(SqList *&L,int i,ElemType &e); //删除数据元素ListDelete
//实现测试函数
int main()
{
SqList *sq;
InitList(sq);
ListInsert(sq, 1, 5);
ListInsert(sq, 2, 3);
ListInsert(sq, 1, 4);
DispList(sq);
return 0;
}
//下面实现要测试的各个自定义函数
//初始化线性表InitList
void InitList(SqList *&L)
{
L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间
L->length=0; //置空线性表的长度为0
}
//销毁线性表DestroyList
void DestroyList(SqList *&L)
{
free(L); //释放L所指的线性表空间
}
//插入数据元素ListInsert
bool ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if(i<1||i>L->length+1)
return false; //参数i错误时返回false
i--; //将顺序表的逻辑序号转化为物理序号
for(j=L->length;j>i;j--) //将的date[i]及后面的元素后移一个位置
L->data[j]=L->data[j-1];
L->data[i]=e; //插入元素e
L->length++; //顺序表长度加1
return true; //成功插入返回true
}
//删除数据元素ListDelete
bool ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if(i<1||i>L->length)
return false; //参数i错误时返回false
i--; //将顺序表的逻辑序号转化为物理序号
e=L->data[i];
for(j=i;j<L->length-1;j++) //将的date[i]及后面的元素前移一个位置
L->data[j]=L->data[j+1];
L->length--; //顺序表长度减1
return true; //成功删除返回true
}
//输出线性表DispList(L)
void DispList(SqList *L)
{
int i;
if (ListEmpty(L))
return;
for (i=0; i<L->length; i++)
printf("%d ",L->data[i]);
printf("\n");
}
//判定是否为空表ListEmpty(L)
bool ListEmpty(SqList *L)
{
return(L->length==0);
}
知识总结:将一些基本算法集合到一起,去实现相应的功能。
学习心得:在学习理解了一些基本算法后,通过动手操作,进一步的加深了对基本算法的理解。