顺序表基本操作函数总结

/*************************************************************************************/
/*   顺序表基本操作函数
/*------------------------------------------------------------------------------------------------------------------------------
/*  
/* Date: 2016年10月14日
/* Auther:vensontao
/************************************************************************************/

#include <stdio.h>
#include <malloc.h>

#define MaxSize 50

typedef char ElemType;

//--------------------------------------------------------
// 顺序表的类型定义
//--------------------------------------------------------
typedef struct 
{
     ElemType data[MaxSize];  // 存放顺序表元素
    int length;                        // 存放顺序表的长度
} SqList;

//========================================================
// 建立顺序表
//========================================================
void CreateList(SqList *&L, ElemType a[], int n)
{
     int i;
     for (i=0;i<n;i++)
          L->data[i]=a[i];
     L->length=n;
}

//========================================================
// 初始化顺序表
//========================================================
void InitList(SqList *&L)
{
    L=(SqList *)malloc(sizeof(SqList)); /*分配存放线性表的空间,并将地址初始化为0*/
    L->length=0;
}

//========================================================
// 销毁顺序表
//========================================================
void DestroyList(SqList *&L)
{
    free(L);
}

//========================================================
// 判断顺序表是否为空
//========================================================
int ListEmpty(SqList *L)
{
    return (L->length==0);
}

//========================================================
// 求顺序表的长度
//========================================================
int ListLength(SqList *L)
{
    return (L->length);
}

//========================================================
// 输出顺序表元素
//========================================================
void DispList(SqList *L)
{
    int i;
    if (ListEmpty(L)) 
         return;
    for (i=0;i<L->length;i++)
         printf("%c ",L->data[i]);
    printf("\n");
}

//========================================================
// 求顺序表中某个元素的值
//========================================================
int GetElem(SqList *L,int i,ElemType &e)
{
    if (i<1 || i>L->length)
       return 0;
    e=L->data[i-1];
    return 1;
}

//========================================================
// 求顺序表中某个元素的位置
//========================================================
int LocateElem(SqList *L, ElemType e)
{
  int i=0;
  while (i<L->length && L->data[i]!=e) 
    i++;
  if (i>=L->length)
    return 0;
  else
    return i+1;
}

//========================================================
// 向顺序表指定位置插入元素
//========================================================
int ListInsert(SqList *&L,int i,ElemType e)
{
  int j;
  if (i<1 || i>L->length+1)
    return 0;
  i--; /*将顺序表位序转化为elem下标*/
  for (j=L->length;j>i;j--) /*将data[i]及后面元素后移一个位置*/
    L->data[j]=L->data[j-1];
  L->data[i]=e;
  L->length++; /*顺序表长度增1*/
  return 1;
}

//========================================================
// 删除顺序表中指定位置的元素
//========================================================
int ListDelete(SqList *&L,int i,ElemType &e)
{
  int j;
  if (i<1 || i>L->length)
    return 0;
  i--; /*将顺序表位序转化为elem下标*/
  e=L->data[i];
  for (j=i;j<L->length-1;j++) /*将data[i]之后的元素前移一个位置*/
    L->data[j]=L->data[j+1];
  L->length--; /*顺序表长度减1*/
  return 1;
}

posted @ 2016-10-14 15:12  vensontao  阅读(1926)  评论(0编辑  收藏  举报