创建和遍历单向线性链表(C)
节点包含两种信息,一种是数据(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);}