线性表

顺序表:   逻辑结构与物理结构相符,一组地址连续的存储单元存储元素,顺序存储

链表:    链式存储,由节点组成,  节点包含数据域,指针域, 数据域存储数据,指针域 指向下一个节点 

 

顺序表实现

   

#define INIT_SIZE 100
#define INCREM 10
#define ok 1
#define ERROR 0
typedef struct Sqlist
{
   ElemType * slist;
   int length;
   int   listsize;

}Sqlist;

 int InitList_sq(Sqlist *L){

        L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));
        L->length=0;
        L->listsize= INIT_SIZE;

  }

int ListInsert_sq(Sqlist *L, int i,ElemType e)
{
   int k;
    if(i<1||i>L->length+1) return ERROR;
    if(L->length >= L->listsize){
       L->slist=(ElemType*)realloc(L->slist,(L->listsize+ICREM)*sizeof(ElemType));
       if(!L->slist) return ERROR;
       L->listsize+=INCREM;
    }


    for(k=L->length-1;k>=i-1;k--)
       L->slist[k+1] = L->slist[k];
       L->slist[i-1] =e;
       L->length++;
       return ok;
}
int ListDelete_sq(Sqlist *L , int i, ElemType *e)
{
   int j;
   if(i<1||L->length) return ERROR;
   *e =L->slist[i-1];  /*e带回删除元素的值*/
   for(j=1;j<L->length;j++)
      L->slist[j-1] = L->slist[j];
    L->length--;
   return ok;
}
int ListLocate_sq(Sqlist *L,ElemType e , int *pos)
{
  ElemType *end = L->slist+L->length;
  ElemType *p = L->slist;
  int i;
  for(i=1;p<end;p++){
    if(*p==e){
          *pos = i;
          break;
     }
      i++;
       
   }
  if(p>=end)
     return ERROR;
  else
     return ok;
}



链表实现

typedef struct LNode
{
  ElemType data;
 struct LNode * next;

}LNode,*LinkList;


//带头节点
void  InitList(LinkList* H)
{
   LNode * head;
   head=(LNode*)malloc(sizeof(LNode));
   if(!head) return ERROR;
   head->next=NULL;
   *H=head;
}
int InsertList(LinkList H, int i , ElemType e)
{
   LNode *p=H,*s;
   int j=0;
   while(p&&j<i-1)
   {
     p=p->next;
     j++;
 
   }
  if(!p || j > i-1) return ERROR;
  s = (LNode *)malloc(sizeof(LNode));
  if(!s) return ERROR;
  s->data = e;
  s->next = p->next;
  p->next = s ;
  return ok;
  
}
int DeleteList(LinkList H , int i,ElemType *e)
{
   LNode *p=H,*s;
  int j =0;
  while(p&&j<i-1)
  {
      p=p->next;
     j++;
  }
  if(!p||j>i-1||!p->next) return ERROR;
   
    s=p->next;
    p->next =s->next;
    *e= s->data;
    free(s);
    return ok;
}
   // 线性表的查找
int GetList(LinkList H,int i, ElemType *e)
{
   LNode *p;
   int j=1;
    p=H->next;
   while(p&&j<i){
    p=p->next;
    j++;

   }
  if(!p||j>i) return ERROR;
  *e=p->data;
  return ok;
   

}









 

 

 

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值