头文件
#pragma once
#define SIZE 10
typedef struct SeqList
{
int elem[SIZE];//保存数据
int length;//有效数据个数
}SeqList,*PSeqList ;
//typedef SeqList* PSeqList;//PSeqList == SeqList*
void InitSeqList(PSeqList plist);//初始化
bool Insert(PSeqList plist,int pos,int val);//在指定位置插入元素
int Search(PSeqList plist,int key);//查找元素
bool DeleteVal(PSeqList plist,int key);//删除元素
bool Deletepos(PSeqList plist,int pos,int *rtval);//删除位置位
//rtval:输出参数,保存删除成功
void Show(PSeqList plist);//打印
bool IsEmpty(PSeqList plist);//判空
bool IsFull(PSeqList plist);//判满
//获取迫使下标储存的数据
bool GetVal(PSeqList plist,int pos,int val);
//修改pos下标的数据
bool SetVal(PSeqList plist,int pos,int newval);
//获取关键字前驱的值
bool GetPriVal(PSeqList plist,int key,int *rtval);
//获取关键字后继的值
bool GetNextVal(PSeqList plist,int key,int *rtval);
//获取当前长度
int GetLength(PSeqList plist);
//清空所有数据
void Clear(PSeqList plist);
//销毁顺序表
void Destory(PSeqList plist);
cpp文件
#include<stdio.h>
#include<assert.h>
#include"seqlist.h"
void InitSeqList(PSeqList plist)//初始化
{
assert(plist != NULL);
plist->length = 0;
}
bool Insert(PSeqList plist,int pos,int val)//在指定位置插入元素
{
assert(plist != NULL);
if(pos < 0 || pos > plist->length || plist ->length == SIZE)
{
return false;
}
//移动数据
for(int i =plist-> length-1; i>=pos;i--)
{
plist->elem[i+1] = plist->elem[i];
}
//插入新数据
plist->elem[pos] = val;
//更新新数据
plist->length ++;
}
int Search(PSeqList plist,int key)//查找元素
{
assert(plist != NULL);
for(int i = 0;i<plist->length-1;i++)
{
if(plist->elem[i] == key)
{
return i;//找到返回下标
}
}
return -1;//找不到返回-1
}
//删除位置位
//rtval:输出参数,保存删除成功
bool DeletePos(PSeqList plist,int pos,int *rtval)
{
assert(plist != NULL);
if(pos<0 || pos >plist->length)
{
return false;
}
if(rtval != NULL)
{
*rtval = plist->elem[pos];
}
//往前移动数据
for(int i = pos;i<plist->length-1;i++)
{
plist->elem[i] = plist ->elem[i+1];
}
//更新数据长度
plist->length --;
return true;
}
bool DeleteVal(PSeqList plist,int key)//删除元素
{
int i = Search(plist,key);
if( i < 0 )
{
return false;
}
return DeletePos(plist,i,NULL);
}
void Show(PSeqList plist)//打印
{
assert(plist != NULL);
for(int i=0;i <plist->length;i++)
{
printf("%d ",plist->elem[i]);
}
printf("\n");
}
bool IsEmpty(PSeqList plist)//判空
{
return plist->length ==0;
}
static bool IsFull(PSeqList plist)//判满
{
return plist->length == SIZE;
}
//获取pos下标储存的数据
bool GetVal(PSeqList plist,int pos,int *rtval)
{
assert(plist != NULL);
if(pos <0 || pos>=plist->length)
{
return false;
}
if(rtval != NULL)
{
*rtval = plist->elem[pos];
}
return true;
}
//修改pos下标的数据
bool SetVal(PSeqList plist,int pos,int newval)
{
assert(plist != NULL);
if(pos<0 || pos>=plist->length)
{
return false;
}
plist->elem[pos] = newval;
return true;
}
bool GetPriVal(PSeqList plist,int key,int *rtval)
{
int i = Search(plist,key);
if(i <= 0)
{
return false;
}
if(rtval != NULL)
{
*rtval = plist->elem[i-1];
}
return true;
}
bool GetNextVal(PSeqList plist,int key,int *rtval)
{
int i = Search(plist,key);
if(i < 0 || i == plist->length-1)
{
return false;
}
if(rtval != NULL)
{
*rtval = plist->elem[i+1];
}
return true;
}
int GetLength(PSeqList plist)
{
return plist->length;
}
void Clear(PSeqList plist)
{
plist->length = 0;
}
void Destory(PSeqList plist)
{
Clear(plist);
}
主函数
#include"seqlist.h"
#include"stdio.h"
int main()
{
SeqList seq;
InitSeqList(&seq);
for(int i = 0;i<20;i++)
{
Insert(&seq,i,i);
}
Show(&seq);
Search(&seq,7);//查找元素
DeleteVal(&seq,7);//删除元素
Show(&seq);
Insert(&seq,3,30);
Show(&seq);
Clear(&seq);
Show(&seq);
return 0;
}