C的单链表的实现

单链表是线性表的链式实现,插入和删除非常方便,可也失去了顺序表可随机存取的优点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h> 
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
//1. struct LNode *next;
LNode *next;
//以上两种定义方式均可声明成功
//LinkList next;此种不行
}*LinkList,LNode;
void InitList(LinkList &L,int capacity) {//用给定的容量初始化一个单链表
L->data=capacity;
LinkList node=L;
//ElemType data=0;
while(capacity--){
node->next=(LinkList)malloc(sizeof(LNode));
node=node->next;
scanf("%d",&(node->data));
node->next=NULL; //对于为空的指针一定要初始化为NULL
}
}
void ListTraverse(LinkList L,void (*visit)(int)){//对链表中的每个元素逐个调用visit函数,直至遍历结束
LinkList node=L;
// for(;node!=NULL;node=node->next)
// visit(node->data);
// 此种或者按以下方式访问
while(node){
visit(node->data);
node=node->next;
}
}
void visit(int data){
printf("data为:%d\n",data);
}
int main(){
LinkList head=(LinkList)malloc(sizeof(LNode));
InitList(head,5);
ListTraverse(head,&visit);
return 0;
}
Donate comment here