顺序表

来源:互联网 发布:csol游戏数据异常 编辑:程序博客网 时间:2024/05/23 20:20

逻辑顺序和物理顺序一致

元素相邻

用数组承载

#include<stdio.h>
#define OK 1
#define ERROR -1           //OK  ERROR方便判断操作是否成功
typedef struct sqlist         //typedef  struct 来方便使用这种结构类型
{
 int elem[100];
 int length;
}Sqlist;
/*int inits(Sqlist *L)              //初始化
{
 L->elem=(int *)malloc(100*sizeof(int));
 if(!L->elem)return ERROR;
 else {L->length=0;return OK;}

}*/
int Insert(Sqlist *L,int i,int e)              //插入元素   都是先判断,再操作  包括i本身,i到n-1向后移一位
{
 int j;
 if(i<0||L->length-1)return ERROR;
 if(L->length>=100)
 {
  printf("线性表溢出\n");
  return ERROR;
 }
 for(j=L->length-1;j>=i-1;--j)
 L->elem[i+1]=L->elem[j];
 L->elem[i-1]=e;
 L->length++;
 return OK;
}
int Delete(Sqlist*L,int i)        //向前一位
{
 int k;int x;
 if(L->length==0)
 {
  printf("线性表为空\n");
  return ERROR;
 }
 else if(i<=1||i>L->length)
 {
  printf("要删除的数据不存在\n");
  return ERROR;
 }
 else {

  x=L->elem[i-1];
  for(k=i;k<L->length;k++)
  L->elem[k-1]=L->elem[k];
  L->length--;return(x);
 }

}
int getelem(Sqlist*L,int i,int *e)   //判断数据是否存在,将数据赋值给一块内存
{
 if(L->length==0||i<0||i>=L->length)
  return ERROR;
 *e=L->elem[i-1];
 return OK;
 
}
int main()
{      
 struct sqlist S=
 {
  {1,2,3,4,5,6},
  6

 };
     Sqlist *L;
 L=&S;
     printf("表的长度%d\n",L->length);
 int *element=0;int a=8;
        element=&a;   //  指针指向必须是合法内存
 if(OK==getelem(L,2,element))
 {
  printf("第二个是:%d\n",*element);
 }
     if(OK==Insert(L,5,140))
 {
  printf("插入第5个正确\n");
 }
        if(OK==getelem(L,5,element))
        {
                printf("第5个是:%d\n",*element);
        }
      if(OK==Delete(L,4))
 {
  printf("删除成功\n");
 }
      int k;
 for(k=0;k<6;k++)
 {printf("输出所有数据:%d\n",L->elem[k]);}
   return 0;
}

时间复杂度分析:O(n)  插入和删除都是

      而查找是O(1),故优势在于快速取出任意元素
0 0
原创粉丝点击