头文件
pragma once#define INIT_SIZE 10typedef struct DSeqList
{int *elem;//指向保存数据的内存int length;//有效数据个数int listsize;//总格子数
}DSeqList;typedef DSeqList * PDSeqList;//初始化函数
void InitDSeqList(PDSeqList plist);//往plist的pos位置插入数据val
bool Insert(PDSeqList plist,int pos,int val);//打印
void Show(PDSeqList plist);//判空
bool IsEmpty(PDSeqList plist);//bool IsFuLL;
////查找,找到了返回下标,没有找到返回-1
int Search(PDSeqList plist,int key);//删除
bool DeleteVal(PDSeqList plist,int key);//删除位置值
//rtval:输出参数,保存删除成功的数据
bool DeletePos(PDSeqList plist,int pos,int *rtval);//获取pos下标存储的数据
bool GetVal(PDSeqList plist,int pos,int *rtval);//修改pos下标的数据
bool SetVal(PDSeqList plist,int pos,int newval);//获取val的前趋值
bool GetPriVal(PDSeqList plist,int key,int *rtval);//获取val的后继值
bool GetNextVal(PDSeqList plist,int key,int *rtval);//长度,即有效数据个数
int GetLength(PDSeqList plist);//清除所有数据
void Clear(PDSeqList plist);//销毁
void Destroy(PDSeqList plist);
cpp文件
#include"dseqlist.h"
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>//初始化函数
void InitDSeqList(PDSeqList plist)
{assert(plist != NULL);if(plist == NULL){return ;}plist->elem = (int *) malloc (INIT_SIZE*sizeof(int));plist->length = 0;plist->listsize = INIT_SIZE;
}
static bool IsFull(PDSeqList plist)
{return plist ->length == plist->listsize;
}//总容量扩大到原来的2倍
static void Inc(PDSeqList plist)
{//plist->elem = (int *) malloc (INIT_SIZE*2*sizeof(int));//errorplist->elem = (int *) realloc(plist->elem,2*plist->listsize*sizeof(int));plist->listsize *= 2;
}//往plist的pos位置插入数据val
bool Insert(PDSeqList plist,int pos,int val)
{assert(plist != NULL);if(pos <0 || pos >plist->length)// !!!{return false;}if(IsFull(plist)){Inc(plist);}for(int i =plist->length-1; i>=pos;i--)//!!!{plist->elem[i+1] = plist->elem[i];}plist->elem[pos] = val;plist->length++;return true;
}//打印
void Show(PDSeqList plist)
{for(int i= 0;i<plist->length;i++){printf("%d ",plist->elem[i]);}printf("\n");
}//判空
bool IsEmpty(PDSeqList plist)
{return plist->length == 0;
}static bool IsFuLL(PDSeqList plist)
{return plist->length == plist->listsize ;
}//查找,找到了返回下标,没有找到返回-1
int Search(PDSeqList plist,int key)
{assert(plist != NULL );for(int i= 0;i<plist->length-1;i++){if(plist->elem[i] == key){return i;}}return -1;
}//删除
bool DeleteVal(PDSeqList plist,int key)
{int i = Search(plist,key);if(i == -1){return false;}return DeletePos(plist,i,NULL);
}//删除位置值
//rtval:输出参数,保存删除成功的数据
bool DeletePos(PDSeqList 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 --;
}//获取pos下标存储的数据
bool GetVal(PDSeqList 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(PDSeqList plist,int pos,int newval)
{assert(plist != NULL);if(pos < 0 || pos >=plist->length){return false;}plist->elem[pos] = newval;return true;
}//获取val的前趋值
bool GetPriVal(PDSeqList 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;
}//获取val的后继值
bool GetNextVal(PDSeqList 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(PDSeqList plist)
{return plist->length;
}//清除所有数据
void Clear(PDSeqList plist)
{plist->length = 0;
}//销毁
void Destroy(PDSeqList plist)
{free(plist->elem);
}
主函数
#include<stdio.h>
#include<stdlib.h>
#include"dseqlist.h"int main()
{DSeqList dseq;InitDSeqList(&dseq);for(int i= 0;i<40;i++){Insert(&dseq,i,i);}Show(&dseq);DeletePos(&dseq,5,NULL);Show(&dseq);Destroy(&dseq);Clear(&dseq);Show(&dseq);return 0;
}