首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

创设和遍历单向线性链表(C)

2013-01-01 
创建和遍历单向线性链表(C)链表(Linked List)是由节点组成的(node)。而节点实质上是一个数据结构(struct or

创建和遍历单向线性链表(C)

链表(Linked List)是由节点组成的(node)。而节点实质上是一个数据结构(struct or class)。链表和数组(Array)的区别在于链表中的节点在内存中的位置不一定是连续的,并且节点个数无需在编译时确定。


节点包含两种信息,一种是数据(data),一种是指向另一个节点的指针。(指针实质上存储的是节点的物理位置)


考虑一个单向线性链表(节点只有一个指针,并且最后一个节点指针内容为NULL)下面定义一个简单的节点:


Over...


完整代码:

#include <stdio.h>#include <stdlib.h>typedef struct stud node;struct stud {  /* 数据 */int   roll;char  name[25];int   age;/* 指针 */struct stud *next;};node *create_list() { int  k, n;/* n代表节点个数,k为计数器 */node  *p, *head;/* head指向头部节点, p为临时指针变量 *//* 接受用户输入 */printf  ("\n How many elements to enter?"); scanf ("%d", &n); for  (k=0; k<n; k++) { /* 第一次循环创建头部节点 */if (k == 0){head = (node *) malloc(sizeof(node)); p = head;  /* 临时指针变量当前指向第一个节点 */}/* 其它循环依次创建下一个节点,并移动临时指针*/else{p->next  = (node *) malloc(sizeof(node)); p = p->next;      }scanf ("%d %s %d", &p->roll, p->name, &p->age); /* 给每个节点数据赋值 */}p->next  =  NULL;   /* 因为是单向链表,所以最后一个节点的指针指向NULL(即0) */return (head);/* 返回头部指针 */} void display (node *head)/* 将链表头部指针作为参数传入 */{int  count = 1;/* 计数器 */node  *p;/* 临时指针变量 */p = head;/* 赋值,指向头部节点 *//* 循环遍历节点,直到最后一个节点 */while (p != NULL){printf ("\nNode %d: %d %s %d", count,p->roll, p->name, p->age);count++;p = p->next;      /* 记住移动指针 */}printf ("\n");}main(){node * head;head = create_list();display(head);}


热点排行