学习笔记---线性表的基本操作---顺序存储(C语言)
2012-05-20 22:21
731 查看
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define LIST_INIT_SIZE/*线性表存储空间初始分配量*/
#define LISTINCREMENT/*线性表存储空间分配增量*/
#define ok 1
#define OVERFLOW -1
#define false 0
typedef struct {
ElemType *elem;/*存储空间*/
int lenght;/*当前线性表长度*/
int listsize;/*当前分配的存储容量*/
}SqList;
int InitList_Sq(SqList *L)
{ /*构建空线性表*/
L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));/*分配存储空间*/
if(!L->elem)exit(OVERFLOW);/*分配存储空间失败*/
L->lenght=0; /*初始化线性表长度为0*/
L->listsize=LIST_INIT_SIZE;/*初始存储容量*/
return ok;
}
int LenghtList_Sq(SqList *L)
{/*求线性表长度*/
return L->lenght;
}
int DestroyList_Sq(SqList *L)
{
/*销毁线性表*/
free(L->elem);/*释放存储空间*/
L->elem=NULL;/*线性表中元素为0*/
L->length=0;/*线性表长度为0*/
L->listsize=0;/*存储空间为空*/
return ok;
}
int ClearList(SqList *L)
{/*清零操作*/
L->length=0;/*线性表长度为0*/
return ok;
}
int ListEmpty(SqList *L)
{
/*判空操作*/
if(L.length=0)/*线性表长度为0*/
return True;
else
return False;
}
int GetElem(SqList *L,int i,ElemType *e)
{
/*得到第I 个元素的数据元素的值*/
if(i<1 || i>L.length)
return false;
e=*(L->elem+i-1);/*取第i个元素,并赋值给e*/
return ok;
}
int LocateElem(SqList *L,ElemType e,void (*compare)(ElemType,ElemType))
{
/*查找与E相等的元素的位置*/
ElemType *p;
i=1;
while(i<=L->length && !compare(*p++,e))/*判断i所在位置*/
++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;
p=L->elem+1;
while(i<=L->length && !(*p++==cur_e))
++i;
if(i>L->length)
return false;
else
{
pre_e=*--p;
return OK;
}
}
int NextElem(SqList L,ElemType pre_e,ElemType cur_e)
{
/* 得到后一个元素的值*/
int i=1;
ElemType *p;
p=L->elem;
while(i<L->length && !(*p++==pre_e))
++i;
if(i>=L->length)
return false;
else
{
cur_e=*++p;
return OK;
}
}
int InsertElem(SqList *L,int i,ElemType e)
{
/*在第I个元素中插入一个值为E的元素*/
int newbase;
SqList *p,*q;
if(i<1 || i>=length+1)/*判断i是否在线性表中*/
return ERROR;
if(L->length>=L->listsize)/*线性表长度大于存储空间长度*/
{
if(!newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)
*sizeof(ElemType))))
return OVERFLOW;
L->elem=newbase;/*新基址*/
L->listsize+=LISTINCREMENT;/*增加存储容量*/
}
p=L->elem+L->length-1;/*线性表长度*/
q=L.elem+i-1;/*第i个元素的前一个位置*/
for(p;p>=q;--p)
*(p+1)=*p;
*q=e;/*赋值给e*/
++L->length;
return ok;
}
int DeleteElem(SqList*L,int i,ElemType e)
{
/* 删除第I个元素*/
SqList *p,*q;
if(i<1 || i>=L->length)
return FALSE;
p=L->elem+i-1;/*第i个元素位置*/
q=L->elem+L->length-1;
e=*p;
for(p;p<=q;++p)
*p=*(p+1);
--L.length;/*线性表长度减一*/
return OK;
}
int ListTraverse(SqList &L,void (*vi)(ElemType))
{
/* 对线性表进行VI的操作*/
int i;
ElemType *p;
p=L.elem;
for(i=1;i<=L.length;++i)
vi(*p++);
return OK;
}
#include<stdlib.h>
#include<malloc.h>
#define LIST_INIT_SIZE/*线性表存储空间初始分配量*/
#define LISTINCREMENT/*线性表存储空间分配增量*/
#define ok 1
#define OVERFLOW -1
#define false 0
typedef struct {
ElemType *elem;/*存储空间*/
int lenght;/*当前线性表长度*/
int listsize;/*当前分配的存储容量*/
}SqList;
int InitList_Sq(SqList *L)
{ /*构建空线性表*/
L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));/*分配存储空间*/
if(!L->elem)exit(OVERFLOW);/*分配存储空间失败*/
L->lenght=0; /*初始化线性表长度为0*/
L->listsize=LIST_INIT_SIZE;/*初始存储容量*/
return ok;
}
int LenghtList_Sq(SqList *L)
{/*求线性表长度*/
return L->lenght;
}
int DestroyList_Sq(SqList *L)
{
/*销毁线性表*/
free(L->elem);/*释放存储空间*/
L->elem=NULL;/*线性表中元素为0*/
L->length=0;/*线性表长度为0*/
L->listsize=0;/*存储空间为空*/
return ok;
}
int ClearList(SqList *L)
{/*清零操作*/
L->length=0;/*线性表长度为0*/
return ok;
}
int ListEmpty(SqList *L)
{
/*判空操作*/
if(L.length=0)/*线性表长度为0*/
return True;
else
return False;
}
int GetElem(SqList *L,int i,ElemType *e)
{
/*得到第I 个元素的数据元素的值*/
if(i<1 || i>L.length)
return false;
e=*(L->elem+i-1);/*取第i个元素,并赋值给e*/
return ok;
}
int LocateElem(SqList *L,ElemType e,void (*compare)(ElemType,ElemType))
{
/*查找与E相等的元素的位置*/
ElemType *p;
i=1;
while(i<=L->length && !compare(*p++,e))/*判断i所在位置*/
++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;
p=L->elem+1;
while(i<=L->length && !(*p++==cur_e))
++i;
if(i>L->length)
return false;
else
{
pre_e=*--p;
return OK;
}
}
int NextElem(SqList L,ElemType pre_e,ElemType cur_e)
{
/* 得到后一个元素的值*/
int i=1;
ElemType *p;
p=L->elem;
while(i<L->length && !(*p++==pre_e))
++i;
if(i>=L->length)
return false;
else
{
cur_e=*++p;
return OK;
}
}
int InsertElem(SqList *L,int i,ElemType e)
{
/*在第I个元素中插入一个值为E的元素*/
int newbase;
SqList *p,*q;
if(i<1 || i>=length+1)/*判断i是否在线性表中*/
return ERROR;
if(L->length>=L->listsize)/*线性表长度大于存储空间长度*/
{
if(!newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)
*sizeof(ElemType))))
return OVERFLOW;
L->elem=newbase;/*新基址*/
L->listsize+=LISTINCREMENT;/*增加存储容量*/
}
p=L->elem+L->length-1;/*线性表长度*/
q=L.elem+i-1;/*第i个元素的前一个位置*/
for(p;p>=q;--p)
*(p+1)=*p;
*q=e;/*赋值给e*/
++L->length;
return ok;
}
int DeleteElem(SqList*L,int i,ElemType e)
{
/* 删除第I个元素*/
SqList *p,*q;
if(i<1 || i>=L->length)
return FALSE;
p=L->elem+i-1;/*第i个元素位置*/
q=L->elem+L->length-1;
e=*p;
for(p;p<=q;++p)
*p=*(p+1);
--L.length;/*线性表长度减一*/
return OK;
}
int ListTraverse(SqList &L,void (*vi)(ElemType))
{
/* 对线性表进行VI的操作*/
int i;
ElemType *p;
p=L.elem;
for(i=1;i<=L.length;++i)
vi(*p++);
return OK;
}
相关文章推荐
- 学习笔记——线性表的动态分配顺序存储结构基本操作(C语言实现)
- 数据结构学习笔记-线性表顺序存储(C语言实现)
- 线性表之顺序存储,基本操作
- MySQL 5.6学习笔记(数据库基本操作,查看和修改表的存储引擎)
- 线性表顺序存储基本操作
- 线性表顺序存储的基本操作
- 顺序线性表的基本操作(C语言实现)
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- C语言学习笔记:17_数组-一维数组(基本操作,选择和冒泡排序,斐波那契数列)
- [学习笔记]线性表的顺序存储
- 线性表的顺序存储的基本操作
- 学习笔记------数据结构(C语言版) 线性表顺序存储
- 线性表的顺序存储格式基本操作:初始化、插入、删除、查找、打印
- 数据结构系列-线性表的顺序存储及基本操作
- 数据结构的串的顺序存储的基本操作(学习历程)
- 线性表_顺序存储/基本操作
- 数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例
- C++基础的不能再基础的学习笔记——顺序容器(基本操作)
- 数据结构学习笔记-栈的顺序存储(C语言实现)
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表