typedef int ElemType; //定义ElemType为int类型
#define INITSIZE 10 //顺序表存储空间初始分配值
//顺序表结构体定义
typedef struct
{
ElemType *data; //存储空间基地址
int length; //顺序表长度(即已存入的元素个数)
int listsize; //当前存储空间容量(即能存入的元素个数)
}sqList;
2.顺序表基本操作
//1.初始化操作 void Initlist(sqList *L); //2.求表长操作 int Getlen(sqList *L); //3.取元素操作 int Getelem(sqList *L,int i,ElemType *e); //4.元素定位操作 int Locate(sqList *L,ElemType x); //5.插入操作 int Insert(sqList*L,int i,ElemType x); //6.删除操作 int Delete(sqList*L,int i,ElemType *e); //7.输出操作 void List(sqList*L); //8.输入操作 void Input(sqList*L,int num);3.完整程序
完整程序包括三个文件:
- main.c(主程序)
用于测试顺序表基本操作 - seqList.h
标准库导入,存放类型定义,符号定义等预定义内容及函数声明。 - seqList.c
存放顺序表基本操作函数主体内容。
1.main.c主程序
//main.c
#include"seqList.h"
int main()
{
int i;
int j;
sqList L;
Initlist(&L); //顺序表初始化
printf("顺序表长:%d n",Getlen(&L)); //获取顺序表长
Input(&L,10); //顺序表赋初值
List(&L); //输出顺序表
printf("插入操作:%dn",Insert(&L,4,25)); //顺序表插值
printf("顺序表长:%d n",Getlen(&L)); //获取顺序表长
List(&L);
Getelem(&L,3,&j);
printf("顺序表第3个元素为:%dn",j);
printf("98是顺序表内第%d号元素n",Locate(&L,98));
List(&L);
Delete(&L,3,&j);
printf("顺序表长:%d n",Getlen(&L)); //获取顺序表长
List(&L);
printf("程序执行完成!");
}
2.seqList.h头文件
//seqList.h #ifndef _SEQLIST_H #define _SEQLIST_H #include#include typedef int ElemType; //定义ElemType为int类型 #define INITSIZE 10 //顺序表存储空间初始分配值 //顺序表结构体定义 typedef struct { ElemType *data; //存储空间基地址 int length; //顺序表长度(即已存入的元素个数) int listsize; //当前存储空间容量(即能存入的元素个数) }sqList; //操作 //1.初始化操作 void Initlist(sqList *L); //2.求表长操作 int Getlen(sqList *L); //3.取元素操作 int Getelem(sqList *L,int i,ElemType *e); //4.元素定位操作 int Locate(sqList *L,ElemType x); //5.插入操作 int Insert(sqList*L,int i,ElemType x); //6.删除操作 int Delete(sqList*L,int i,ElemType *e); //7.输出操作 void List(sqList*L); //8.输入操作 void Input(sqList*L,int num); #endif
2.seqList.h头文件
//seqList.c
#include"seqList.h"
//1.初始化操作
void Initlist(sqList*L)
{//创建一个空的顺序表
L->data=(ElemType*)malloc(sizeof(ElemType)*INITSIZE); //为顺序表分配初始空间,将空间基地址赋值给data
L->length=0; //初始长度为0(元素个数)
L->listsize=INITSIZE; //初始空间大小(能存入元素的数量)
printf("顺序表创建成功!基地址:%o,表长:%d,表大小:%dn",L->data,L->length,L->listsize);
}
//2.求表长操作
int Getlen(sqList*L)
{
return (L->length);
}
//3.取元素操作
int Getelem(sqList*L,int i,ElemType*e)
{//取顺序表第i号元素,通过e返回
if(i<1 || i>L->length) return 0; //超出范围参数返回0
else
{
*e=L->data[i-1];
return 1;
}
}
//4.元素定位操作
int Locate(sqList *L,ElemType x)
{
int i;
for(i=0;ilength;i++) //历遍寻找目标元素值
{
if(L->data[i] == x)
{
return i+1; //找到目标返回位置
}
}
return 0; //没找到,返回0
}
//5.插入操作
int Insert(sqList*L,int i,ElemType e)
{
int j;
if(i<1 || i>L->length) return 0; //插入位置错误
if(L->length == L->listsize) //当顺序表已满时,重新分配空间
{
L->data=(ElemType*)realloc(L->data,sizeof(ElemType)*((L->length)+1));
L->listsize++; //顺序表大小+1
}
for(j=L->length;j>i-1;j--) //将第i位及其之后的元素后移一个位
L->data[j]=L->data[j-1];
L->data[i-1]=e;
L->length++;
return 1; //插入成功,返回1
}
//6.删除操作
int Delete(sqList*L,int i,ElemType *e)
{
int j;
if(i<1 || i>L->length) return 0; //超出范围,参数不合理
*e=L->data[i-1];
for(j=i-1;jlength-1;j++) //将目标值之后所有值前移一个位置。
L->data[j]=L->data[j+1];
L->length--; //顺序表长度-1;
return 1; //删除操作成功,返回1
}
//7.输出操作
void List(sqList*L)
{
int i;
for(i=0;ilength;i++)
printf("-%d",L->data[i]);
printf("n");
}
//8.输入操作
void Input(sqList*L,int num)
{
int i;
for(i=0;i
L->data[i]=99-i;
L->length++;
}
}
本次学习笔记如上所示,不足之处欢迎大家批评指正。



