链表简述

来源:互联网 发布:淘宝商城客服 编辑:程序博客网 时间:2024/05/22 10:32

链表是一种利用指针进行动态存储分配的最常见最简单的一种结构(呵呵-。-)。

数组必须事先定义固定的长度(元素个数),不能适应数据动态增减的情况,当数据增加时,可能超出原先定义的元素个数;当数据减少时,会造成内存浪费。

而链表能动态地进行存储分配,可以适应数据动态增间的情况,而且可以方便的插入和删除数据项(在数组中插入和删除时需要移动其他数据项)。

链表有单链表,双链表,环形链表等多种形式,每个链表有一个“头指针”,它指向链表的第一个元素,链表的元素称为结点(Node),结点中包含两个部分的内容,第一部分是数据本身,第二部分是一个指针,指向下一个结点,最后一个节点称为表尾,表尾结点的指针不指向任何地址,存入的是空值(NULL)。

比如,建立一个有3个结点的链表存放学生的学号,姓名和分数的程序:

#include<stdio.h>
struct stu
{
long num;
char *name;
float score;
struct stu *next;
 } ;
 int main()
 {
  struct stu stu1,stu2,stu3,*head,*p;
  head=&stu1;
  stu1.num=1101;
  stu1.name="caocao";
  stu1.score=90;
  stu1.next=&stu2;
  stu2.num=1102;
  stu2.name="sunquan";
  stu2.score=98;
  stu2.next=&stu3;
  stu3.num=1103;
  stu3.name="liubei";
  stu3.score=80;
  stu3.next=NULL;
  for(p=head;p!=NULL;p=p->next)
  printf("%ld\t%s\t%.2f\n",p->num,p->name,p->score);
  return 0;
 }

这个程序定义一个学生类,头结点指向stu1,赋值后指向stu2,stu2指向stu3,然后stu3.next指向空值。最后用一个指针输出链表所有存储的内容。结果如下:


链表的主要操作有以下4种:

1、建立链表

2、结点的查找与输出

3、插入一个结点

4、删除一个结点

0 0