用指针处理链表(面试经常测试点之一)

1.链表概述:

  链表是一种重要的数据结构,它是动态地进行存储分配的一种结构。

  链表的结构:头指针  结点  表尾。其中结点分为两个部分:1.为用户需要用的实际数据。2.为下一个结点的地址。表尾一般都用指向“NULL”表示链表结束。

2.简单链表:

  a.搞清楚各个结点是怎样构成链表的。b.没有头指针 head行不行。

  所有结点都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表称为“静态链表”。

3.处理动态链表所需的函数:

  a.malloc  函数  其原型为:void *malloc(unsigned int size);   作用是在内存的动态存储区中分配一个长度为size的连续空间。如果此函数未能成功地执行,则返回空指针。

  b.calloc   函数  其原型为:void *calloc(unsigned n,unsigned size);  作用是在内存的动态区存储中分配n个长度为size的连续空间。函数返回一个指向分配域起始地址的指针;如果分配不成功,返回NULL。用calloc函数可以为一维数组开辟动态内存空间,n为数组元素个数,每个元素长度都为size。

  c.free      函数  其原型为:void free(void *p);  作用是释放有p指向的内存区,使这部分内存区能被其他变量使用。p是最近一次调用calloc或malloc函数时返回的值。free函数无返回值。

4.建立动态链表:

  所谓建立动态链表是指在程序执行过程中从无到有地建立一个链表,即一个一个地开辟结点和输入各个结点数据,并建立起前后相链的关系。

5.输出链表:

  将链表中各个结点的数据依次输出。首先要知道链表第一个结点的地址,也就是要知道head的值,然后设一个指针变量的P,先指向第一个结点,输出p所指的结点,然后使p后移一个结点,再输出。知道链表的尾结点。head的值由实参传过来,也就是将已有的链表的头指针传给被调用的函数。

6.对链表的删除操作:

  从一个动态链表中删去一个结点,并不是真正从内存中把它抹掉,而是把它从链表中分离出来,只要撤消原来的链接关系即可。

7.对链表的插入操作:

  对链表的插入是指将一个结点插入到一个已有的链表中。(只需要在插入结点处建立一个链接关系即可。)

8.对链表的综合操作:

  

View Code
 1 #include<stdio.h>
2 main()
3 {
4 struct student *head,stu;
5 long del_num;
6 printf("input records:\n");
7 head=creat();
8 print(head);
9 printf("\ninput the deleted number:");
10 scanf("%ld",&del_num);
11 head=del(head,del_num);
12 print(head);
13 printf("\ninput the inserted record:");
14 scanf("%ld,%f",&stu.num,&stu.score);
15 head=insert(head,&stu);
16 print(head);
17 }


posted on 2011-09-26 16:01  呓语若梦半浮生  阅读(1196)  评论(0编辑  收藏  举报

导航