带头结点双链循环线性表

/*带头结点双链循环线性表*/

<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>

#define  null  0
  typedef char data;
  typedef  Struct  dulistnode{
  DataType  data;
  Struct  dulistnode  *prior, *next;
}dulistnode
typedef Dulistnode  *Dulinklist;
 Status  InitList_DuL( DuLinkList L ) {
     If  (!(p = GetElemP_DuL (L ) ))
       Return  ERROR;                         
     p->prior = p->next ;
     p->next = p->prior ;
     return OK;
} //InitList_DuL
Status  DestroyList_DuL ( DuLinkList &L ) {
         while  ( L.front ) {
        L.rear = L.front->next;
        Free  ( L.front );
        L.front = L.rear ;
     }
     return OK;
} // DestroyList_DuL
Status  ClearList_DuL ( DuLinkList &L ) {
     L=Null;
} // ClearList_DuL
Status  ListEmpty_DuL ( DuLinkList L ) {
         if  ( L.front = = L.rear ) return TRUE;
     p = L.front->next ;
     if  (L.rear = = p ) L.rear = L.front ;
     free  ( p );
     return FALSE;
} // ListEmpty_DuL
Status  ListLength_DuL ( DuLinkList L ) {
         int  DuLinkListLength ( sqDuLinkList L ) {
     return  ( L.rear - L.front + MAXLSIZE )%MAXLSIZE;
     }
} // ListLength_DuL

Status  GetElem_DuL ( DuLinkList &L, int i, ElemType &e ) {
if  ( ! ( p = GetElemP_DuL ( L, i ) ) )            
     return  ERROR;                        
     e = p->data;
     return OK
} // GetElem_DuL

Status  LocateElem_DuL ( DuLinkList L, ElemType e, Position &q, int (* compare )  ( ) ) {
} // LocateElem_DuL

Status  PriorElem_DuL ( DuLinkList L, int i, int j, ElemType cur_e, ElemType &pre_e ) {
     if  ( ! ( p = GetEleP_DuL (L, i ) , 1<i<=length) )        
       return  ERROR;                          
if  ( !(q = GetElemP_DuL (L, j ) ) )            
     cyr_e = p->data;
     pre_e = q->data;
     p->prior = q;
     q->next = p;
     return OK;
} // PriorElem_DuL
Status  NextElem_DuL ( DuLinkList L, int i, int j ElemType cur_e, ElemType &next_e ) {
     if  ( ! ( p = GetEleP_DuL (L, i ) , 1<i<=length) )        return  ERROR;                          
if  ( !(q = GetElemP_DuL (L, j ) ) )            
     cyr_e = p->data;
     next_e = q->data;
     p->next = q;
     q->prior = p;
     return OK;

} // NextElem_DuL

Starus  ListInsert_DuL ( DuLinkList &L, int i,ElemType e ) {
if  ( !(p = GetElemP_DuL (L, i ) ) )        
       return  ERROR;                
     if  (!(s = ( DuLinkList ) malloc ( sizeof ( DuLNode ) ) ) ) return ERROR;
     s->data = e;
     s->prior = p->prior; p->prior->next = s;
     s->next = p;          p->prior = s;
     return OK;
} //ListInsert.DuL

Status  ListDelete_DuL ( DuLinkList &L, int I, ElemType &e ) {
     if  ( ! ( p = GetElemP_DuL ( L, i ) ) )
       return  ERROR;            
     e = p->data;
     p->prior->next = p->next;
     p->next->prior = p->prior;
     free ( p ); return OK;
} //ListDelete_DuL

Status  ListTraverse_DuL ( DuLinkList L, int i, visit ( ) ) {
} // ListTraverse_DuL
main( )
{struct  Lnode  *head, *q;  char  e, y;  int  i, n;  int  select, x1, x2, x3, x4, m, g;
head=setnull(&head);
printf("请输入数据长度:  ");
scanf("%d",  &n);
for(i=1; i<n; I++)
{printf("将数据插入到单链表中:  ");
 scanf("%d",  &y);
 insert(&head,  y,  i);
}
display(&head);
printf("select  1 求长度  length()/n");
printf("select  2 取结点  get()/n");
printf("select  3 求值查找 locate()/n");
printf("select  4 删除结点 delete()/n");
printf("input  your  select :  ");
scanf("%d",  &select);
 switch(select)
  { case  1 :{x1=length(&head);
           printf("输出单链表的长度:  ",  x1);
           display(&head);
          }
   case  2 :{printf("请输入要取的结点:  ");
           scanf("%d,  &m");
           x2=get(&head,   m);
           printf(x2);
          display(&head);
         }
   case  3 :{printf("请输入要查找的数据:   ");
           scanf("%d",  &e);
           x3=locate(&head,  e);
           printf(x3);
           display(&head);
          }
   case  4 :{printf("请输入要删除的结点:  ");
           scanf(%d,  &m);
           x4=delete(&head,  m);
           printf(x4);
           display(&head);
          }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值