本文介绍一种本人常用的较为简单,比较标准的一种创建并使用链表的方法,尾插法,直接用代码演示了
文末有完整代码
导入所需要的头文件
#include#include #include
创建结构体
typedef struct LNode { int data;//结点的数据域 struct LNode* next; //结点的指针域 }LNode, * List;//List为指向结构体LNode的指针类型
主函数
int main() { List L; L = (LNode*)malloc(sizeof(LNode));//为头结点动态分配内存空间 L->next = NULL;//头节点不储存数据 LNode* p = L;//创建一个p指针首先指向头节点 int data; while (scanf("%d", &data) != -1) {//尾插法创建链表,输入一些正整数数据,以-1代表结束 if (data < 0) break; LNode* temp = (LNode*)malloc(sizeof(LNode));//为输入的数据节点动态分配内存空间 //申请的是指针LNode*型,链表每个结点类型需统一 temp->next = NULL; temp->data = data; p->next = temp;//p的next指针指向新建的节点 p = p->next;//让p指向p的下一节点,保证它指向链表尾部 } //循环结束后,链表创建完成 p = L->next;//让p指针指向创建的链表的头指针L的next,因为头节点没有数据,所以从L->next开始 while (p) { //输出链表 printf("%d ", p->data); p = p->next; } }
完整代码
#include#include #include typedef struct LNode { int data;//结点的数据域 struct LNode* next; //结点的指针域 }LNode, * List;//List为指向结构体LNode的指针类型 int main() { List L; L = (LNode*)malloc(sizeof(LNode));//为头结点动态分配内存空间 L->next = NULL;//头节点不储存数据 LNode* p = L;//创建一个p指针首先指向头节点 int data; while (scanf("%d", &data) != -1) {//尾插法创建链表,输入一些正整数数据,以-1代表结束 if (data < 0) break; LNode* temp = (LNode*)malloc(sizeof(LNode));//为输入的数据节点动态分配内存空间 //申请的是指针LNode*型,链表每个结点类型需统一 temp->next = NULL; temp->data = data; p->next = temp;//p的next指针指向新建的节点 p = p->next;//让p指向p的下一节点,保证它指向链表尾部 } //循环结束后,链表创建完成 p = L->next;//让p指针指向创建的链表的头指针L的next,因为头节点没有数据,所以从L->next开始 while (p) { //输出链表 printf("%d ", p->data); p = p->next; } }
测试结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)