学习笔记---线性表的基本操作---顺序存储(C语言)

#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;

}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值