用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

链表 c数据结构

2012-08-28 作者: 神马举报

[c]代码库

/*链表
*/
 
# define null 0
 
typedef char ElemType; /* 字符型数据*/
 
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
};
 
setnull ( struct LNode **p );
int length ( struct LNode **p );
ElemType get ( struct LNode **p,int i );
void insert ( struct LNode **p,ElemType x,int i );
int delete ( struct LNode **p,int i );
void display ( struct LNode **p );
main()
{
    struct LNode *head,*q; /*定义静态变量*/
    int select,x1,x2,x3,x4;
    int i,n;
    int m,g;
    char e,y;
 
    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 ( "输出单链表的长度%d ",x1 );
        display ( &head );
    }
    break;
    case 2:
    {
        printf ( "请输入要取得结点: " );
        scanf ( "%d",&m );
        x2=get ( &head,m );
        printf ( x2 );
        display ( &head );
    }
    break;
    case 3:
    {
        printf ( "请输入要查找的数据: " );
        scanf ( "%d",&e );
        x3=locate ( &head,e );
        printf ( x3 );
        display ( &head );
    }
    break;
    case 4:
    {
        printf ( "请输入要删除的结点: " );
        scanf ( "%d",&g );
        x4=delete ( &head,g );
        printf ( x4 );
        display ( &head );
    }
    break;
    }
}
}
 
setnull ( struct LNode **p )
{
    *p=null;
}
int length ( struct LNode **p )
{
    int n=0;
    struct LNode *q=*p;
    while ( q!=null )
    {
        n++;
        q=q->next;
    }
    return ( n );
}
ElemType get ( struct LNode **p,int i )
{
    int j=1;
    struct LNode *q=*p;
    while ( j<i&&q!=null )
    {
        q=q->next;
        j++;
    }
    if ( q!=null )
        return ( q->data );
    else
        printf ( "位置参数不正确!\n" );
}
int locate ( struct LNode **p,ElemType x )
{
    int n=0;
    struct LNode *q=*p;
    while ( q!=null&&q->data!=x )
    {
        q=q->next;
        n++;
    }
    if ( q==null )
        return ( -1 );
    else
        return ( n+1 );
}
void insert ( struct LNode **p,ElemType x,int i )
{
    int j=1;
    struct LNode *s,*q;
    s= ( struct LNode * ) malloc ( sizeof ( struct LNode ) );
    s->data=x;
    q=*p;
    if ( i==1 )
    {
        s->next=q;
        p=s;
    }
    else
    {
        while ( j<i-1&&q->next!=null )
        {
            q=q->next;
            j++;
        }
        if ( j==i-1 )
        {
            s->next=q->next;
            q->next=s;
        }
        else
            printf ( "位置参数不正确!\n" );
    }
}
int delete ( struct LNode **p,int i )
{
    int j=1;
    struct LNode *q=*p,*t;
    if ( i==1 )
    {
        t=q;
        *p=q->next;
    }
    else
    {
        while ( j<i-1&&q->next!=null )
        {
            q=q->next;
            j++;
        }
        if ( q->next!=null&&j==i-1 )
        {
            t=q->next;
            q->next=t->next;
        }
        else
            printf ( "位置参数不正确!\n" );
    }
    if ( t=null )
        free ( t );
}
void display ( struct LNode **p )
{
    struct LNode *q;
    q=*p;
    printf ( "单链表显示: " );
    if ( q==null )
        printf ( "链表为空!" );
    else if ( q->next==null )
        printf ( "%c\n",q->data );
    else
    {
        while ( q->next!=null )
        {
            printf ( "%c->",q->data );
            q=q->next;
        }
        printf ( "%c",q->data );
    }
    printf ( "\n" );
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...