数据结构(C语言版)第二章线性表之顺序存储结构

一、线性表的类型定义
1、线性结构的特点:在数据元素的非空有限集合中,
(1)存在唯一的一个“第一个”或“最后一个”数据元素;
(2)除第一个元素外,每个数据元素只有一个前驱;
(3)除最后一个元素外,每个数据元素只有一个后继;

2、线性表中的元素是多种多样的,但同一线性表中的元素必定有相同的特性,相邻数据元素之间存在序偶关系。

3、线性表长度与数组长度的区别:
(1)线性表长度是指线性表中数据元素的个数,随着线性表的插入和删除操作,这个量是变化的;
(2)数组长度是指存放线性表的存储空间的长度,在存储分配后这个量一般是不会改变的;
(3)线性表的长度 ≤ 数组长度

二、线性表顺序存储结构的基本操作

#include
#include
#define maxsize 1024
typedef struct
{
   int data[maxsize];
   int length;
}sqlist;
/*初始化构造一个空表L*/
/*当length=0时表示表为空*/
int InitList(sqlist *L)
{
    memset(L->data,0,sizeof(L));//初始化数据为0
    L->length=0;                //初始化长度为0
    return 0;
}
/*销毁线性表L*/
/*当length=0时线性表为空*/
int DestroyList(sqlist *L)
{
   L->length=0;
}
/*将线性表重置为空表*/
int ClearList(sqlist *L)
{
   while(!L->data)
      free(L->data)
   L->length=0;
   return 0;
}
/*判断线性表是否为空表*/
/*若L为空表,则返回ture[1],否则返回false[0]*/
int ListEmpty(sqlist L)
{
   int i;
   i=ListLength(L);
   if(i==0)
     return 0;
   return 1;
}
/*返回中数据元素的个数*/
int ListLength(sqlist L)
{
   return L.length;
}
/*返回L中第i个数据元素的值*/
int GetElem(sqlist L,int i)
{
   /*条件判断是否在范围内,i从1开始,没有第0个的说法*/
   if(i<1 || L.length==0 || i>L.length)
        return -1else
      return L.data[i-1];
}
/*查找线性表中是否存在某个值*/
int LocateElem(sqlist L,int e)
{
   int i; 
   for(i=0;i<L.length;i++)
   {
      if(L.data[i]==e)
         return i+1;
   }
   return -1;
}
/*寻找某个非第一个元素的前驱*/
int PriorElem(sqlist L,int e)
{
  int i;
  if(L.lenght==0)
      return 0;
  for(i=1;i<L.length;i++)
  {
     if(L.data[i]==e)
        return L.data[i-1];
  }
  return -1;
}
/*寻找某个非最后一个元素的后继*/
int NextElem(sqlist L,int e)
{
  int i;
  if(L.length==0)
     return 0;
  for(i=0;i<L.length-1;i++)
  {
    if(L.data[i]==e)
        return L.data[i+1];
  }
  return -1;
}
/*在第i个位置前插入元素e*/
int InsertElem(sqlist *L,int i,int e)
{
   if(L->length>=Maxsize || i<1 || i>L->length+1)
      return 0;
   int k;
   for(k=L->length-1;k>=i-1;k--)
   {
     L->data[k+1]=L->data[k];
   }
   L->data[i-1]=e;//插入元素
   L->length++;//表长增加1;
   return 1;
/*删除指定位置的元素*/
int DeletElem(sqlist *L,int i)
{
    if(i>L->length || i<1 || L->length==0)//不在删除范围内
        return 0;
     int k;
     for(k=i-1;k<L->length-1;k++)
     {
        L->data[k]=L->data[k+1];
     }
     L->length--;
     return 1;

你可能感兴趣的:(知识点积累)