链表的创建及遍历(C语言)

链表的创建及遍历(C语言)

链表这个东西,很多时候会让我们很头疼,因为链表需要用到指针,而指针正是我们学习C语言遇到的最大困难之一,而链表又不得不用指针。

1.链表与数组的区别

数组对于我们来说已经是非常熟悉的,而它与链表相似,有有很大的不同。

首先数组是一个有序的元素序列,所有的元素都是依次按顺序排列,在内存中的地址也是依次排列,我们可以通过改变它的下标来访问其中的元素。

而链表则不同,它在内存中并不是各个元素的地址按顺序排列,但我们却可以按照一定的顺序输出,这是因为每一个元素中通过指针来存储了下一个元素的地址,通过这个地址来访问下一个元素。

2.链表的创建

struct Node

{

int data;

struct Node* next;

};

typedef struct Node* List;

首先,我们需要创建一个结构体, 其中data是该节点的元素,而*next则是下一个节点的地址。

List createlist( int n)

{

list head = NULL, t = NULL, p = NULL;

for( int i = 0; i < n; i++)

{

t = (struct Node*)malloc( sizeof(struct Node) );

t -> next = NULL;

scanf("%d", &t -> data);

if( p == NULL )

{

p = t;

head = p;

}

else

{

p -> next = t;

p = t;

}

}

return head;

}

然后,我们先定义三个结构体指针并对它们进行初始化,分别是 head(头节点)、t (用来存储要插入元素的数据)、p(当前链表位置),但我们每一次要插入新节点的时候,我们需要用 malloc 函数为 t 申请一个空间来存储数据。然后进入 if-else 语句,将 t 插入到链表中,并且更新 p 到当前节点的位置。

3.链表的遍历

void print( list head)

{

list t = head;

while( t != NULL )

{

printf("%d ", t -> data);

//每次打印完,就跳到下一个节点

t = t -> next;

}

printf("\n");

}

4.综合代码

#include

#include

struct Node

{

int data;

struct Node* next;

};

typedef struct Node* List;

List createlist( int n);

void print( List head);

int main()

{

int n;

printf("输入链表节点个数:\n");

scanf("%d", &n);

printf("\n输入链表节点:\n");

List head = createlist(n);

printf("\n输出的链表:\n");

print(head);

return 0;

}

// 创建链表

List createlist( int n)

{

List head = NULL, t = NULL, p = NULL;

for( int i = 0; i < n; i++)

{

t = (struct Node*)malloc( sizeof(struct Node) );

t -> next = NULL;

scanf("%d", &t -> data);

if( p == NULL )

{

p = t;

head = p;

}

else

{

p -> next = t;

p = t;

}

}

return head;

}

// 打印链表

void print( List head)

{

List t = head;

while( t != NULL )

{

printf("%d ", t -> data);

//每次打印完,就跳到下一个节点

t = t -> next;

}

printf("\n");

}

好啦到这里就结束啦,希望我的代码对你有所帮助,以后我会继续更新有关链表的相关知识。如果有什么问题,或更好的方法,可以私信告诉我哦。

相关推荐