简单链表实现

此处安利一波广告,没收广告费的,推荐大家一个刷题的网址 https://www.dotcpp.com/,话不多说,好不好进去就知道了,

思路:

  该题目较为简单,一个链表的空间足矣,但是时间复杂度就有点难算了,基本想法就是,先直接输入时候就组成一张链表,然后直接对链表进行排序(此处选择了冒泡排序,比较熟悉也容易实现),再打印输出即可。

代码:

  

#include <stdio.h>
#include <stdlib.h>
typedef struct Link{ 
  int stu_Num;
  int stu_score;
  struct Link *next;
}Link;
Link *InitLink(){
  Link *p1 = (Link *)malloc(sizeof(Link));
  p1->next = NULL;
  return p1;
}
Link *CreatLink(int num,Link *head){
  Link *Link1 = head;
  for(int i = 0;i < num;i++){
    Link *p1 = (Link *)malloc(sizeof(Link));
    scanf("%d%d",&p1->stu_Num,&p1->stu_score);
    p1->next = NULL;
    Link1->next = p1;
    Link1 = p1;
  }
  return Link1;
}
Link *SortLink(Link *head){
  int tempnum,tempscore;
  Link *start = head->next;
  Link *end = start->next;
  while(start!=NULL){
    while(end!=NULL){
      if(start->stu_Num >end->stu_Num){
        tempnum = end->stu_Num;
        tempscore = end->stu_score;
        end->stu_Num = start->stu_Num;
        end->stu_score = start->stu_score;
        start->stu_Num = tempnum;
        start->stu_score = tempscore;
      }
      end = end->next;
    }
    end = start = start->next;
  }
}
void printfLink(Link *head){
  Link *temp = head->next;
  while(temp!=NULL){
    printf("%d %d\n",temp->stu_Num,temp->stu_score);
    temp = temp->next;
  }
}
int main()
{
  int M,N;
  Link *head = InitLink();
  scanf("%d%d",&M,&N);
  CreatLink(M+N ,head);
  SortLink(head);
  printfLink(head);
  return 0;
}

猜你喜欢

转载自www.cnblogs.com/8023cyy/p/12745745.html