用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...