C语⾔基础⼊门:链表详解篇
  链表是⼀种常见的重要的数据结构。它是动态地进⾏存储分配的⼀种结构。它可以根据需要开辟内存单元。链表有⼀个“头指针”变量,以head表⽰,它存放⼀个地址。该地址指向⼀个元素。链表中每⼀个元素称为“结点”,每个结点都应包括两个部分:
  ⼀为⽤户需要⽤的实际数据,⼆为下⼀个结点的地址。因此,head指向第⼀个元素:第⼀个元素⼜指向第⼆个元素;……,直到最后⼀个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放⼀个“NULL”(表⽰“空地址”),链表到此结束。
  链表的各类操作包括:学习单向链表的创建、删除、插⼊(⽆序、有序)、输出、排序(选择、插⼊、冒泡)、反序等等。
  基本操作
  1. 节点的构造
  #include
c语言入门书籍排行榜
  #include
  #include
  #defineLEN sizeof(struct stu)structstu{
  //数据char num[10];char name[20];float score;
  //指针structstu*next;};
  2. 建⽴链表
  struct stu *create(){
  /structstu*head;structstu*p1, *p2;
  head = (struct stu *)malloc(LEN); head->next =NULL;
  p1 = head;
  p2 = (struct stu *)malloc(LEN);
  printf("输⼊个⼈信息:学籍号、姓名和总成绩\n");
  scanf("%s%s%f",p2->num, p2->name, &p2->score); getchar();
  while(strcmp(p2->num,"0") !=0){/*
  执⾏结束后
  1。p2的next域为NULL.
  2。第⼀个节点的next域指向第⼆个节点的数据域
  3。p1指针指向第⼆个节点的数据域
  p2->next = p1->next; p1->next = p2; p1 = p2;
  p2 = (struct stu *)malloc(LEN);printf("输⼊个⼈信息:学籍号、姓名和总成绩\n");
  scanf("%s%s%f",p2->num, p2->name, &p2->score); getchar(); }
  free(p2);returnhead;};
  3. 输出链表
  void print(struct stu * head){structstu*p;
  printf("num name score\n"); p = head->next;
  while(p!=NULL){
  printf("%-10s %-20s %-4.1f\n",p->num, p->name, p->score);
  p=p->next; }}
  4. 插⼊节点
  void insert(struct stu * head, struct stu * p0)
  { struct stu *p1, *p2; p1 = head->next;p2 = head;
  while((p1!=NULL) && (strcmp(p0->num, p1->num)==1))
  {p2=p1; p1=p1->next; } p0->next = p2->next; p2->next = p0;}
  5. 删除节点
  int delete(struct stu *head,charnum[]){ structstu*p1, *p2;p1 = head->next; p2 = head;  while(p1!=NULL&&strcmp(num, p1->num)!=0)
  { p2=p1; p1=p1->next; }
  if(!p1){return0; }
  p2->next = p1->next;free(p1);return1;}
  6. 主函数
  //主函数int main()
  {structstu*h, *p0;charnum[10];printf("建⽴链表\n");
  h = create(); p0 = (struct stu *)malloc(LEN);
  printf("输⼊待插⼊的个⼈信息:学籍号、姓名和总成绩\n");
  scanf("%s%s%f",p0->num, p0->name, &p0->score);
  getchar();if(strcmp(p0->num,"0") !=0){ insert(h, p0); }
  printf("输⼊待删除个⼈信息的学号\n");
  scanf("%s",num);if(strcmp(num,"0") !=0){delete(h, num);
  }printf("输出链表\n"); print(h);return0;}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。