SeqList.h
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;//假定线性表的元素类型为整型
#define LIST_SIZE 1024 //假定我们的线性表长度是1024
#define TRUE 1
#define FALSE 0
typedef struct {
ElemType data[LIST_SIZE]; //数组形式表示顺序表
int last; //顺序表的长度,指向最后一个节点的位置,last的存在的目的:为了在函数调用的时候传递数据方便,因为我们与分配的空间中,并不是立即存满的
}SequenList;///数组顺序表的实现初始化
///获得一个长度为0的数组
SequenList* InitSeq();
///求长度:求线性表中的元素的个数
///获得当前数组顺序表的元素个数,pList:顺序表的起始地址
int GetSizeSeq(SequenList* pList);///取元素:取给定位置的元素值
///返回值是元素值
///pList:目标的顺序表, pos:获取元素的下标 ,e:将元素值放入
int GetElemSqList(SequenList* pList, int pos, ElemType *e);/// 查元素:查找给定元素值的位置
///相同值只去第一个
///返回值:-1表示没有找到,否则返回带查找元素的角标
///pList:传入的数组顺序表,Key比对的值
int LocateElemSqList(SequenList* pList, ElemType key);/// 插入元素:在指定的位置插入给定的值
/// 插入的位置为k:k: 0 -- n-1
//pList:目标顺序表,x待插入的元素,k插入的位置
int InsertElemSqList(SequenList* pList, ElemType x, int k);///删除:删除指定位置的值或者是删除给定的值。
//pList:目标顺序数组,k表示需要删除的位置
int DelElemSqList(SequenList *pList, int k);///遍历元素:从头到尾扫描线性表。
///pList:目标顺序数组
void showSeqList(SequenList* pList);
SeqLiist.c顺序表实现
#include "SeqList.h"
/*
1) 初始化:给线性表中的相关参数赋值
2) 求长度:求线性表中的元素的个数
3) 取元素:取给定位置的元素值
4) 查元素:查找给定元素值的位置
5) 插入元素:在指定的位置插入给定的值
6) 删除:删除指定位置的值或者是删除给定的值。
7) 遍历元素:从头到尾扫描线性表。*/
SequenList* lPtr;
//实现初始化
SequenList* InitSeq()
{
SequenList *pList=NULL;
pList = (SequenList *)malloc(sizeof(SequenList)); //分配了数组空间
if (pList != NULL)
pList->last = 0;//初始化成功,且长度为0return pList;
}
//SequenList seqenList;
//SequenList *seqenList;
//前者分配空间了,而后者没有空间
//求长度:求线性表中的元素的个数
int GetSizeSeq(SequenList* pList) {
return pList->last;
}//取元素:取给定位置的元素值
/// pList:目标的顺序表, pos:获取元素的下标 ,e:将元素值放入
int GetElemSqList(SequenList* pList, int pos, ElemType *e) {
if (pos<0 || pos>pList->last) {
return FALSE;
}
if (pList->last <= 0)
return FALSE;
//说明此时pos在0 -- n之间
*e = pList->data[pos];
return TRUE;
}// 查元素:查找给定元素值的位置
//相同值只去第一个
//返回值:-1表示没有找到,否则返回带查找元素的角标
//pList:传入的数组顺序表,Key比对的值
int LocateElemSqList(SequenList* pList, ElemType key)
{
int i;
for (i = 0;i < pList->last;i++)
{
if (pList->data[i] == key)
return i;
}
return -1;
}// 插入元素:在指定的位置插入给定的值
// 插入的位置为k:k: 0 -- n-1
// 顺序表:不满
//pList:目标顺序表,x待插入的元素,k插入的位置
int InsertElemSqList(SequenList* pList, ElemType x, int k)
{
int j;//顺序表尚未填满
if (pList->last >= LIST_SIZE - 1)
return FALSE;//表明K是有效位置
if (k<0 || k>(pList->last + 1))
return FALSE;for (j = pList->last;j >= k;j--)
{
pList->data[j + 1] = pList->data[j];//插入元素,元素要后移
}
pList->data[k] = x;
pList->last = pList->last + 1; //顺序表长度要加1
return TRUE;
}//删除:删除指定位置的值或者是删除给定的值。
//pList:目标顺序数组,k表示需要删除的位置
int DelElemSqList(SequenList *pList, int k)
{
//参数k有效性检查
if ((k >= 0 && k <= pList->last) && (pList->last != 0))
{
for (int j = k;j <= pList->last;j++) {
pList->data[j] = pList->data[j + 1];
}
pList->last--;
return TRUE;
}
return FALSE;
}//遍历元素:从头到尾扫描线性表。
void showSeqList(SequenList* pList)
{
for (int i = 0;i < pList->last;i++)
{
printf(" %d", pList->data[i]);
}
}
main.c测试接口
#include"SeqList.h"
int main(void)
{
lPtr = InitSeq();//这样是否可以=>可以的,且使用NULL来判断是否初始化完毕
if (lPtr)
{
//todo:继续使用这个顺序表
for (int i = 0;i < 10;i++)
{
InsertElemSqList(lPtr, i, i);
}
printf("初始化后顺序表的元素个数:%d", GetSizeSeq(lPtr));
printf("************\n");
showSeqList(lPtr);
InsertElemSqList(lPtr, 2000, 0);
printf("初始化后顺序表的元素个数:%d", GetSizeSeq(lPtr));
printf("************\n");
showSeqList(lPtr);
DelElemSqList(lPtr, 1);
printf("初始化后顺序表的元素个数:%d", GetSizeSeq(lPtr));
printf("************\n");
showSeqList(lPtr);
int pos = LocateElemSqList(lPtr, 16); //查找给定元素的位置
if (pos >= 0)
{
printf("当前元素位于%d", pos);
}
else
{
printf("没有找到这个元素");
}
printf("************\n");
showSeqList(lPtr);
}
else
{
//todo:提示没有可以使用的空间
}
getchar();
getchar();
return 0;
}