用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


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

链表

2019-12-12 作者:兄弟萌举报

[c]代码库

#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data;//数
struct Node *next;//指针
}*Linklist,Node;//node是指向结构体的一个结构体变量linklist指向链表的指针

Linklist creat(int n)//建立
{
	Linklist head,r,p;
	int x,i;
	head=(Node*)malloc(sizeof(Node));//开辟空间
	r=head;//r指向头
	printf("输入数字:\n");
	for(i=n;i>0;i--)
	{
		scanf("%d",&x);
		p=(Node*)malloc(sizeof(Node));
		p->data=x;
		r->next=p;
		r=p;
	}
	r->next=NULL;
	return head;
}
void output(Linklist head)//输出
{
	Linklist p;
	p=head->next;
	do{
		printf("%3d",p->data);
		p=p->next;
	}while(p);
	printf("\n");
}
void find(Linklist head,int x)//寻找
{
int i=0,j=0;
Linklist p;
p=head;
while(p){
	if(p->data==x){
		printf("元素存在,他在线性表的第%d个位置上\n",i++);
		p=p->next;
		j=1;}
	else{
		p=p->next;
		i++;}
}
if(j==0)
	printf("查找的元素不存在\n");
}
void insert(Linklist head,int i,int x)//插入
{
	int j=0;
	Linklist p,s;
	p=head;
	while(p&&j<i-1)  
	{
		p=p->next; 
		j++;
	}
	if(!p||j>i-1)
		printf("\n指定的插入位置不存在");
	s=(Linklist)malloc(sizeof(Node));
	s->data=x;
	s->next=p->next;
	p->next=s;
}
void delete_ith(Linklist head,int i)//删除按位置
{
	int j=0;
	Linklist p;
	p=head;
	while(p&&j<i-1)  
	{
		p=p->next; 
		j++;
	}
	if(!p||j>i-1)
		printf("\n删除的位置不合理");
	p->next=p->next->next;
}
void delete1(Linklist head,int i)//删除按照元素
{

	Linklist p;
	p=head;
	while(p->next)  
	{
		if(p->next->data==i){
			p->next=p->next->next;
		}
		else{
		p=p->next;
	
		}
	}
}
void length(Linklist head)//长度
{	int j=0;
	Linklist p;
	p=head->next;
	while(p)
	{
		p=p->next;
		j++;
	
	}
		printf("\n%d",j);
}
void null(Linklist head)//判断是否为空
{	int j=0;
	Linklist p;
	p=head->next;
	while(p)
	{
		p=p->next;
		j++;
	
	}
	if(j==0)
		printf("\n空");
	else
		printf("\n不为空");		
}
/*void free(Linklist head)
{
	Linklist p;
	p=head;
	while(p)
	{
		p=p->next;
		delete head;
		head=p;
	}
}*/
void printi(Linklist head,int i)//
{
	int j=0;
	Linklist p;
	p=head;
	while(p&&j<i)  //找到第i个元素
	{
		p=p->next; 
		j++;
	}
	printf("%d",p->data);
}
void main()
{
Linklist head;
int n,x,position,i,j,a;
printf("输入数字的个数n\n");
scanf("%d",&n);
head=creat(n);
printf("输出数字\n");
output(head);
printf("输入你要查的数x:\n");
scanf("%d",&x);
find(head,x);
printf("输入你要插入的数x和他的pos位置\n");
scanf("%d%d",&x,&position);
insert(head,position,x);
output(head);
printf("输入你要删除的第i个元素\n");
scanf("%d",&i);
delete_ith(head,i);
printf("删除后的链表为\n");
output(head);

printf("长度为");length(head);printf("\n");
null(head);
//free(head);
output(head);
scanf("%d",&j);
printi(head,j);printf("\n");
output(head);

scanf("%d",&a);
delete1(head,a);
output(head);
}





分享到:
更多

网友评论    (发表评论)


发表评论:

评论须知:

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