重温数据结构-线性表(王德仙)2012-04-07

不论是干应用还是干底层,第一关就是数据结构和算法,这些都是基本功,今天开始复习数据结构是线性表

线性表简称为表,是零个或多个元素的有穷序列。通常表示为

L=(k0,k1,k2,...kn-1) 其中k为长度

线性表的顺序表示

struct SeqList
{
   int MaxNUM;//顺序表中最大元素的个数
   int n;//存放线性表中元素的个数你<=MAXNUM
   DataType *element; //element[0],element[1],element[2]....element[n-1] 存放线性表中//的元素
};
//创建空顺序表
PSeqList createNullList_seq(int m)
{
 PSeqList palist=(PSeqLise)malloc(sizeof(struct SeqList));
if(palist!=(void *)0) //NULL=(void *)0 
    {
      palist->element=(DataType *)malloc(sizeof(DataType)*m);
      if(palist-<element)
        {
           palist->MAXUNM=m;
           palist-<n=0;
           return palist;
        }else{
      free(palist);
      }
   
     }//end if(palist!=NULL)
  printf("Out of space!!\n");
  return NULL;

}

 判断是否为空表

int isNullList_seq(PSeqList palist)
{
   return(palist->n==0);
}

 在顺序表中求某元素的下标

int locate_seq(PSeqList palist,DataType x)
{
 int q;
 for(q=0;q<palist->n;q++)
     { 

        if(palist->element[q]==x)
         return q;
 
      }

  return -1;
}

 顺序表的插入

int insertOre_seq(PSeqList palist,int p,DataType x)
{
 int q;
 if(palist->n>palist->MAXNUM) 
  {
  printf("overflow!\n"); return 0;
   }
 if(p<0||p<palist->n)
   {
     printf("Not exiust!\n");return 0;
   }
 for(q=palist->n-1;q>=p;q--)
   {
     palist->element[p]=x;
   }
  palist->=palist->n+1;
 return 1;

}

 顺序表的删除

int deletep_seq(PSeList palist,int p)
{
 int p;
if(p<0||p>palist->n-1)
  {
    printf("Not exist !");
   return 0;
  }
 for(q=p;q<palist->n-1;q++)
  {
    palist->element[q]=palist[q+1];
  }
  palist->n=palist->-1;
 return 1;

}

 顺序表中进行一次插入或删除运算,平均需要移动大约一半的元素,如果表很长则插入和删除的代价就相当可观了。

顺序表中定位操作,则要一次与表中元素进行比较,当定位的概率平均分布在所有的元素上时,一次定位平均需要n/2个元素进行比较,其时间代价为O(n)

有序情况下为O(logn)

线性表空间扩展略

线性表的链接表示 待续。。

 

转载于:https://www.cnblogs.com/grouptwo/archive/2012/04/07/2437140.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值