周常二链表

链表是一种常见的采用动态存储分配方式的数据结构。

与数组区别

可以使用静态数组来存放数据,但使用数组时,要先指定数组中包含元素的个数,即数组长度。如果向这个数组中加入的元素个数超过了数组的长度,便不能正确保存所有的内容。也可以使用动态 数组来存放数据,根据实际元素个数动态调整数组大小,但分配的存储空间必须是连续的, 且在插入或删除等操作过程中涉及大量元素的移动。

主要介绍单链表:

定义:如果在链表中,每个结点只有一个指针,所有结点都是单线联系, 除了末尾结点指针为空外,每个结点的指针都指向下一个结点,一环扣一环形成一条线性链, 称此链表为单向线性链表或简称单链表。

链表的建立:

1.头插法:jd*,boy*为设置的结构体自定义名

void toucha(jd*head)
 {
  jd*q;
 char name[20];
 int score;
 while(1)
 {
  scanf("%s%d",name,&score);
  if(score==0)
  break;
  q=(jd*)malloc(sizeof(jd));
  q->next=NULL; 
  strcpy(q->name,name);
  q->score=score;
  q->next=head->next;
  head->next=q;
  } 
 }

2.尾插法、

void cj(boy*head)
 {
 	boy*p,*q;
 	p=head;
 	char name[20];
 	int num;
 	int score;
 	while(1)
 	{
	 scanf("%s%d%d",name,&num,&score);
 		if(num==0)
 		{
 			break;
		 }
		 q=(boy*)malloc(sizeof(boy));
		 strcpy(q->name,name);
		 q->num=num;
		 q->score=score;
		 p->next=q;
		 p=q;
		 
	 }
	 p->next=NULL;
 }

链表的遍历:

void sc(jd*head)
 {
  jd*p=head->next;
  for(p;p;p=p->next)
  {
   printf("%s %d\n",p->name,p->score);
  }
 }

链表的插入:插入到第i个位置

void zen(jd*head)
 {
  int i,j=0;
  scanf("%d",&i);
  jd*p=head;
  while(j<i-1&&p)
  {
   j++;
   p=p->next;
  }
  if(p)
  {
  jd*q;
  q=(jd*)malloc(sizeof(jd));
  scanf("%s%d",q->name,&q->score);
  q->next=p->next;
  p->next=q;
     }
 

链表的删除:删除第i个位置

void shan(jd*head)
 {
  int i,j=0;
  scanf("%d",&i);
  jd*p=head;
  while(j<i-1&&p)
  {
   j++;
   p=p->next;
  }
  if(p==NULL||p->next==NULL)
  {
   printf("错误");  
  }
  else
  {
   jd*q;
   q=p->next;
   p->next=q->next;
   free(q);
  }
 }

链表的查询:

void cha(jd*head)
 {
  int i,j=0;
  scanf("%d",&i);
  jd*p=head;
  while(j<i&&p)
  {
   j++;
   p=p->next;
  }
  if(p==NULL)
  {
   printf("没有这个数");  
  }
  else
  printf("%s %d",p->name,p->score); 
  
 }

链表的修改:

void gai(jd*head)
 {
  int i,j=0;
  scanf("%d",&i);
  jd*p=head;
  while(j<i&&p)
  {
   j++;
   p=p->next;
  }
  if(p==NULL)
  {
   printf("错误");  
  }
  else
  {
   char name[20];
   int score;
   scanf("%s%d",name,&score);
   strcpy(p->name,name); 
   p->score=score;
  }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值