链表的创建、计数、逐个输出、删除特定值、插入某个值、排序

直接上代码:

#include<stdio.h>

typedef struct ll{
  int data;
  struct ll *next;
}node;

node *creat()
{
  node *head,*p,*s;
  int x,cycle = 1;
  head = (node *)malloc(sizeof(node));
  p = head;
  printf("input data:\r\n");
  while(cycle)
  {
    scanf("%d",&x);
    if(x){
    //p->next = s;
    s = (node *)malloc(sizeof(node));
    p->next = s;  //要先申请内存,再把它赋值给别人
    s->data = x;
    p=s;}
    else
    {
       cycle = 0;
    }
  }
  head = head->next;
  p->next = NULL;
  return head;
}

int counting(node* head)
{
  node *p;
  int n=0;
  p = head;
  while(p!=NULL)
  {
    p = p->next;
    n++;
  }
  return n;
}

void print(node* head)
{
  node *p;
  p=head;
  printf("the node data:\r\n");
  while(p!=NULL){
    printf("%d  ",p->data);
    p = p->next;
  }
}

//删除链表中的num
node *del(node *head,int num)
{
  node *p1,*p2;
  p2 = head;
  p1 = p2->next;
  while(p1->data!=num && p1->next!=NULL)
  {
    p2 = p1;
    p1 = p1->next;
  }
  if(p1->data == num)
  {
    p2->next = p1->next;
    free(p1);
  }
  return head;
}

node *insert(node *head,int num)
{
  node *p0,*p1,*p2;
  p0 = (node *)malloc(sizeof(node));
  p0->data = num;
  p2 =head;
  p1 = p2->next;
  while(p1->data<num&&p1->next!=NULL)
  {
    p2 = p1;
    p1 = p1->next;
  }
  if(p1->data>num&&p2->data<num)
  {
    p2->next = p0;
    p0->next = p1;
  }
  return head;
}

void *sort(node *head)
{
  int i,n,j=0;
  node *p;
  
  n = counting(head);
  printf("n : %d\r\n",n);
  for(int l = 1;l<n;l++){
    p = head;
    for(i=0;i<n-l;i++)
    {
      if(p->data>p->next->data)
      {
        int temp = p->data;
        p->data = p->next->data;
        p->next->data = temp;
      }
      p = p->next;
    }
  }
  return head;
}

void main()
{
  node *p;
  int n;
  p = creat();
  print(p);
  // counting(p);
  // printf("input the number to delete\r\n");
  // scanf("%d",&n);
  // p = del(p,n);
  // print(p);
  // printf("input the number to add\r\n");
  // scanf("%d",&n);
  // p = insert(p,n);
  // print(p);
  printf("sort\r\n");
  p = sort(p);
  print(p);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值