头文件
#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;
}