数据结构顺序表C

//顺序表的定义
#define MAXSIZE 100 //此处定义线性表可能打到的最大长度
typedef struct
{
    ElemType elem[MAXSIZE];//线性表占用的数组空间
    int last;//记录线性表中最后一个元素在elem[]中的位置
}SeqList;
//查找
//1、按下标
相当于L.elem[i-1]
//2、按值查找
int Locate(SqList L, ElemType e)
{
  i = 0;//i为扫描的计数器,初值为0,即从第一个元素开始比较
  while(i<=L.last&&L.elem[i]!=e)
    i++;
  if(i<=L.last)
    return(i+1);
  else
    return(-1);//若没有找到,则返回空序号
}
#插入操作
#define OK 1
#define ERROR 0
int InsList(SeqList L, int i,ElemType e)
{
  if(i<1&&i>L.last+2)//i为插入位置序号1,2...n
    return ERROR;
  if(L->last>=MAXSIZE-1)
  {
    printf("表已满,无法插入
");
    return ERROR;   
  }
  for(k=L->last;k>=i-1;k--)
    L->elem[k+1]=L->elem[k];
  L->elem[i-1] = e;
  L->last++;
  return OK;     
}
#删除操作
int DelList(SeqList L, int i, ElemType *e)
{
  if(i<1&&i>L.last+1)
    return ERROR;
  *e=L->elem[i-1];
  for(int j=i;j<=L.last;j++)#注意
  {
     L.elem[i-1]=L.elem[i]
  }
  L.last--;
  return OK;
}
/*********************有序表合并***********************/
/*有两个顺序表LA和LB,其元素均为递增有序排列,编写一个算法,将它们合并成一个递增有序表LC*/
int merge(Sqlist LA, Sqlist LB, Sqlist *LC)
{
  int i,j;
  i=0,j=0;
  while(i<=LA.last&&j<=LB.last)
  {
    if(LA.elem[i]<=LB.elem[j])
       LC.elem[++last]=LA.elem[i++];
    else
       LC.elem[++last]=LB.elem[j++]; 
  }
  while(i<=LA.last)
    LC.elem[++last]=LA.elem[i++];
  while(j<=LB.last)
    LC.elem[++last]=LB.elem[j++];
  return OK
}
原文地址:https://www.cnblogs.com/zangkuo/p/6073319.html