c语言动态链表的创建和插入


#include
#include
#define LEN sizeof(struct student)
struct student
{
 long num;
 float score;
 struct student *next;
};
int n;
int main()
{
 struct student* creat();
 //struct student* del(struct student* head, long);
 struct student* insert(struct student*, struct student *);
 void print(struct student*);
 struct student*head, stu;
 //long del_num;
 printf("input records:\n");
 head = creat();
 print(head);
 //printf("input the deleted number:\n");
 //scanf("%d",&del_num);
 //head = del(head,&del_num);
 //head = del(head, del_num);
 //print(head);
 printf("input the inserted record:\n");
 scanf("%d %f",&stu.num,&stu.score);
 head = insert(head, &stu);
 print(head);
 return 0;
}
struct student *creat()
{
 struct student *head;
 struct student *p1, *p2;
 n = 0;
 p1 = p2= (struct student*)malloc(LEN);
 //p2 = (struct student*)malloc(LEN);
 scanf("%d %f", &p1->num, &p1->score);
 head = NULL;
 while (p1->num != 0)
 {
  n = n + 1;
  if (n == 1) head = p1;
  else p2->next = p1;
  p2 = p1;
  p1 = (struct student *)malloc(LEN);
  scanf("%d %f", &p1->num, &p1->score);
 }
 p2->next = NULL;
 return(head);
}
//struct student *del(struct student*head, long num)
//{
// struct student *p1, *p2;
// if (head == NULL)
// {
//  printf("\nlist null!\n");
//  return(head);
// }
// p1 = head;
// while (num!=p1->num&&p1->next != NULL)
// {
//  p2 = p1;
//  p1 = p1->next;
// }
// if (num == p1->num)
// {
//  if (p1 == head) head = p1 ->next;
//  else p2->next = p1->next;
//  printf("delete:%d\n", num);
//  n = n - 1;
// }
// else
// {
//  printf("%d not been found!\n", num);
//  return(head);
// }
//}
struct student*insert(struct student*head, struct student *stud)
{
 struct student*p0, *p1, *p2;
 p1 =p2= head;
 p0 = stud;
 if (head == NULL)
 {
  head = p0;
  p0->next = NULL;
 }
 else
 {
  //for (; (p0->num > p1->num) && (p1->next != NULL);)
 
   while((p0->num > p1->num) && (p1->next != NULL))
  {
    p2 = p1;
  p1 = p1->next;
  }
   if (p0->num <= p1->num)
   {
    if (head == p1)
    {
     head = p0;
     p0->next = p2;
    }
    else
    {
     p2->next = p0; p0->next = p1;
    }
   }
  else
  {
  p1->next = p0; p0->next = NULL;
  }
  }
  n = n + 1;
  return (head);
}

//  if (p1->next == NULL)
//  {
//   if (p0->num > p1->num)
//   {
//    p1->next = p0;
//    p0->next = NULL;
//   }
//   else
//   {
//    head = p0;
//    p0->next = p1;
//   }
//  }
//  else
//  {
//   p2 = p1;
//   while (p0->num > p1->num)
//   {
//    p1 = p1->next;
//   }
//   if (p0->num <= p1->num)
//   {
//    p2->next = p0;
//    p0->next = p1;
//   }
//   else
//   {
//    p1->next = p0;
//    p0->next = NULL;
//   }
//  }
// }
//}
void print(struct student *head)
{
 struct student *p;
 printf("Now,these %d records are:", n);
 p = head;
 if (head != NULL)
 do
 {
  printf("%d %f\n", p->num, p->score);
  p = p->next;
 } while (p != NULL);
}

//
 

转载于:https://www.cnblogs.com/pquan/p/11518178.html

你可能感兴趣的:(c语言动态链表的创建和插入)