顺序表
来源:互联网 发布:3d扫描数据 编辑:程序博客网 时间:2024/04/19 14:07
//顺序表是以一组地址连续的存储单元依次存储数据的线性结构
//存储结构
#define LIST_INIT_SIZE 10 //线性表存储空间的初始分配量
#define LIST_INCREMENT 2 //线性表的存储空间的分配增量
#define ElemType int
typedef struct
{
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位
}Sqlist;
//基本操作12个
void InitList(Sqlist *L)
{
(*L).elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!(*L).elem)
exit(OVERFLOW); //存储分配失败
(*L).length=0; //空表长度为0
(*L).listsize=LIST_INIT_SIZE; //初始分配容量
}
void DestroyList(Sqlist *L)
{
free((*L).elem);
(*L).elem=NULL;
(*L).length=0;
(*L).listsize=0;
}
void ClearList(Sqlist *L)
{//初始条件:顺序线性表L已存在 操作结果:将L置空
(*L).length=0;
}
bool ListEmpty(Sqlist L)
{
if(L.length==0)
return true;
else
return false;
}
int ListLength(Sqlist L)
{
return L.length;
}
int GetElem(Sqlist L,int i,ElemType *e)
{
if(i<1||i>L.length)
return ERROR ;
*e=*(L.elem+i-1);
else
return 1;
}
bool compare(ElemType e1,ElemType e2)
{
if (e1==e2)
return true;
else return false;
}
int LocateElem(Sqlist L,ElemType e,compare(ElemType,ElemType))
{
ElemType *p;
int i=1;
p=L.elem;
while (i<L.length&&!compare(*p++,e))
++i;
if(i<=L.length)
return i;
else return 0;
}
int PriorElem(Sqlist L,ElemType cur_e,ElemType *pre_e)
{
int i=2;
ElemType *p=L.elem+1;
while (i<=L.length&&*p!=cur_e)
{
p++;i++;
}
if(i>L.length)
return 0;
else
{
*pre_e=*--p;
return i;
}
}
int NextElem(Sqlist L,ElemType cur_e,ElemType *next_e)
{
int i=1;
ElemType *p=L.elem;
while(i<L.length&&*p!=cur_e)
{
i++;p++;
}
if(i==L.length)
return 0;
else
{
*next_e=*++p;
return i;
}
}
bool ListInsert(Sqlist *L,int i,ElemType e)
{
ElemType *newbase,*q,*p;
if(i<1||i>(*L).length+1)
return false;
if ((*L).length>=(*L).listsize)
{
newbase=(ElemType *)realloc((*L).elem,((*L).listsize+LIST_INCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
(*L).elem=newbase; //新基址
(*L).listsize+=LIST_INCREMENT;
}
q=(*L).elem+i-1; //q为插入位置
for(p=(*L).elem+(*L).length-1;p>=q;--p)
*(p+1)=*p;
*q=e;
++(*L).length;
return 1;
}
bool ListDelete(Sqlist *L,int i)
{
ElemType *p,*q;
if(i<1||i>(*L).length)
return 0;
p=(*L).elem+i-1; //p为被删元素位置
q=(*L).elem+(*L).length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
(*L).length--;
return 1;
}
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- Oracle 10g Shrink Table 详解
- 当你疲惫时,准备放弃时,看看这个吧。
- vm linux 网络配置 vm 局域网的虚拟
- 今天很累!
- c++语言
- 顺序表
- 001
- Aggregating data using group functions
- Editplus调用TortoiseSVN进行版本控制
- Linux SDK for UPnP Devices v1.4阅读函数概要
- bit 的 一些有用的操作
- String类
- Log4j 使用教程
- 日语语法实践篇七——新编日语第一册第八课之前文篇