您的位置:首页 > 数据库

sqlist顺序表

2015-07-13 15:21 375 查看
#include "sqList.h"

/**********函数实现*******/

Status InitList(SqList &L)
{//初始化顺序表
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}

Status DestroyList(SqList &L)
{//销毁顺序表
free(L.elem);
/// L.elem=NULL;
// L.length=0;
// L.listsize=0;
return OK;
}

Status ClearList(SqList &L)
{//重置顺序表
L.length=0;
return OK;
}

Status ListEmpty(SqList L)
{//判断表空
if(L.length==0)
return TRUE;
return FALSE;
}

Status ListLength(SqList L)
{//返回顺序表表长
if(!ListEmpty(L))
return L.length;
return 0;
}

Status ListInsert(SqList &L,int i,ElemType e)
{
//顺序表插入操作
//1判断i值合法
ElemType *p,*q;
if(i<1||i>L.length+1)
return ERROR;
//2判断存储空间是否满
if(L.length>=L.listsize)
{
ElemType *newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit (OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
//3插入元素
q=&L.elem[i-1];
for(p=&L.elem[L.length-1];p>=q;p--)
{
*(p+1)=*p;
}
*q=e;
L.length++;
return OK;
}

Status ListDelete(SqList &L,int i,ElemType &e)
{//顺序表删除操作
//1.判断i值合法性
ElemType *p,*q;
if(i<1||i>L.length)
return ERROR;
//2.删除元素
p=&L.elem[i-1];
e=*p;
q=&L.elem[L.length-1];
for(++p;p<=q;++p)
{
*(p-1)=*p;
}
L.length--;
return OK;
}

Status GetElem(SqList L,int i,ElemType &e)
{//获取元素操作
if(i<1||i>L.length)
return ERROR;
if(ListEmpty(L))
return ERROR;
e=L.elem[i-1];
return OK;//空表?
}

Status LocateElem(SqList L,ElemType e)
{//定位
ElemType *p;
int i=1;
p=L.elem;
/*
while(i<=L.length||!compare(*p++,e))*/
while(i<=L.length&&*p!=e)
{
i++;
p++;
}
if(i<=L.length)
return i;
return ERROR;
}

Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e)
{//返回元素的前驱(前驱不存在)
int i=2;
ElemType *p;
p=L.elem+1;
while (i <= L.length &&*p!= cur_e)
{//?
i++;
p++;
}
if(i<=L.length)
pre_e=*--p;
return OK;
}

Status NextElem(SqList L,ElemType cur_e,ElemType &next_e)
{//返回元素的后继(后继不存在)
int i=1;
ElemType *p;
p=L.elem;
while(i<L.length&&*p!=cur_e)
{
i++;
p++;
}
if (i < L.length)
next_e = *p++;
return OK;
}
/*
void print(ElemType c){
//打印元素
printf("%d",c);
}*/

/*
Status ListTraverse(SqList L,void(*visit)(ElemType&))
{//遍历数组元素//?
ElemType *p;
int i;
p=L.elem;
for(i=0;i<L.length;i++)
{
visit(p++);
}
printf("\n");
return OK;
}*/

Status ListTraverse(SqList L)
{//遍历元素
int i;
for(i=0;i<L.length;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
return OK;
}

/*sqlist.cpp*/

/*
顺序表操作SqList
by Amily
*/

/******函数声明与头文件******/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

#define LIST_INIT_SIZE 100//初始分配量
#define LISTINCREMENT 10//分配增量
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW 0

typedef int ElemType;
typedef int Status;
typedef struct
{
ElemType *elem;//基地址
int length;  //数组长度
int listsize;  //初始容量 //
}SqList;

Status InitList(SqList &L);//初始化顺序表
Status DestroyList(SqList &L);//销毁顺序表
Status ClearList(SqList &L);//重置顺序表
Status ListEmpty(SqList L);//判断表空
Status ListLength(SqList L);//返回顺序表表长
Status ListInsert(SqList &L,int i,ElemType e);//顺序表插入操作
Status ListDelete(SqList &L,int i,ElemType &e);//顺序表删除操作
Status GetElem(SqList L,int i,ElemType &e);//获取元素操作
Status LocateElem(SqList L,ElemType e);//定位

Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e);//返回元素的前驱
Status NextElem(SqList L,ElemType cur_e,ElemType &next_e);//返回元素的后继
//Status ListTraverse(SqList L,void(*visit)(ElemType&));//遍历数组元素
Status ListTraverse(SqList L);//遍历元素
//void print(ElemType &c);//打印元素
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: