顺序表操作的实现
备注:本章所写皆照抄朱老师数据结构第五版教材,为学习和复习所用。
定义结构体SeqList
typedef struct
{
DataType list[MaxSize];
int size;
}SeqList;
初始化ListInitiate(L)
void ListInitiate(SeqList *L) //初始化顺序表L
{
L->size=0; //定义出事数据元素个数
}
求当前数据元素个数ListLength(L)
int ListLength(SeqList L)
{
return L.size;
}
插入数据元素ListInsert(L,i,x)
int ListInsert(SeqList *L,int i,DataType x)
//在顺序表L的第i(0<=i<=size)个位置前插入数据元素值x
//插入成功返回1,插入失败返回0
{
int j;
if(L->size>=MaxSize)
{
printf("顺序表已满无法插入");
return 0;
}
else if(i<0||i>L->size)
{
printf("参数i不合法");
return 0;
}
else
{
for(j=L->size;j>i;j--)
L->list[j]=L->list[j-1];
L->list[i]=x; //插入x
L->size++; //元素个数加1
return 1;
}
}
删除数据元素ListDelete(L,i,x)
int ListDelete(SeqList *L,int i,DataType *x)
//删除顺序表L中第i(0<=i<=size-1)个位置处的数据元素并保存到x中
//删除成功返回1,删除失败返回0
{
int j;
if(L->size<=0)
{
printf("顺序表已空无数据元素可删\n");
return 0;
}
else if(i<0||i>L->size-1)
{
printf("参数i不合法");
return 0;
}
else
{
*x=L->list[i]; //保护删除的元素到x中
for(j=i+1;j<=L->size-1;j++)
L->list[j-1]=L->list[j];
L->size--; //数据元素个数减1
return 1;
}
}
取数据元素ListGet(L,i,x)
int ListGet(SeqList L,int i,DataType *x)
//取顺序表L中第i个数据元素存入x中,成功返回1,失败返回0
{
if(i<0||i>L.size-1)
{
printf("参数i不合法\n");
return 0;
}
else
{
*x=L.list[i];
return 1;
}
}
完整的头文件SeqList.h
typedef struct
{
DataType list[MaxSize];
int size;
}SeqList;
void ListInitiate(SeqList *L) //初始化顺序表L
{
L->size=0; //定义出事数据元素个数
}
int ListLength(SeqList L)
{
return L.size;
}
int ListInsert(SeqList *L,int i,DataType x)
//在顺序表L的第i(0<=i<=size)个位置前插入数据元素值x
//插入成功返回1,插入失败返回0
{
int j;
if(L->size>=MaxSize)
{
printf("顺序表已满无法插入");
return 0;
}
else if(i<0||i>L->size)
{
printf("参数i不合法");
return 0;
}
else
{
for(j=L->size;j>i;j--)
L->list[j]=L->list[j-1];
L->list[i]=x; //插入x
L->size++; //元素个数加1
return 1;
}
}
int ListDelete(SeqList *L,int i,DataType *x)
//删除顺序表L中第i(0<=i<=size-1)个位置处的数据元素并保存到x中
//删除成功返回1,删除失败返回0
{
int j;
if(L->size<=0)
{
printf("顺序表已空无数据元素可删\n");
return 0;
}
else if(i<0||i>L->size-1)
{
printf("参数i不合法");
return 0;
}
else
{
*x=L->list[i]; //保护删除的元素到x中
for(j=i+1;j<=L->size-1;j++)
L->list[j-1]=L->list[j];
L->size--; //数据元素个数减1
return 1;
}
}
int ListGet(SeqList L,int i,DataType *x)
//取顺序表L中第i个数据元素存入x中,成功返回1,失败返回0
{
if(i<0||i>L.size-1)
{
printf("参数i不合法\n");
return 0;
}
else
{
*x=L.list[i];
return 1;
}
}
测试主函数
#include<stdio.h> //包含printf()函数
#define MaxSize 100 //定义MaxSize为100
typedef int DataType; //定义DataType为int
#include"SeqList.h" //包含SeqList.h头文件
void main()
{
SeqList myList;
int i,x;
ListInitiate(&myList); //初始化函数调用
for(i=0;i<10;i++) //插入10个数据元素
ListInsert(&myList,i,i+1); //插入函数调用
ListDelete(&myList,4,&x); //删除函数调用
//显示顺序表的当前数据元素
for(i=0;i<ListLength(myList);i++) //当前元素个数函数调用
{
ListGet(myList,i,&x); //取元素函数调用
printf("%d",x); //显示数据元素
}
}