汉扬编程 编程大纲 c语言数据结构——单链表的写法

c语言数据结构——单链表的写法

链表在是一种物理空间中不连续,逻辑连续的一种存储结构。进行数据插入和删除数据时比顺序线性表快很多。那应该怎样在c语言中写出链表的各种操作呢?

c语言数据结构——单链表的写法

首先,链表由一个个结点连接而成,因此需要有一个结构体包含当前结点的数据和指向下一个结点的指针:

c语言数据结构——单链表的写法

c语言数据结构——单链表的写法

接下来就是对链表的各种操作。首先要有一个头结点

c语言数据结构——单链表的写法

然后是对链表进行插入操作。需要的参数有链表头和插入的位置还有插入值:

链表可以进行插入同样也可以进行删除操作,需要的参数同样是链表头和插入的位置还有插入值:

要判断链表是否为空只需要判断头结点下一个结点是不是为空即可。

1个小时学会单链表,C语言数据结构专题之单链表的课程代码

课程代码资料

c语言数据结构——单链表的写法

1个小时学会单链表,C语言数据结构专题之单链表的课程代码

#include <stdio.h>#include <stdlib.h>struct Node{ int data; //数据域 struct Node* next; //指针域};struct Node* createList(){ struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); //headNode 成为了结构体变量 //变量使用前必须被初始化 //headNode->data = 1; headNode->next = NULL; return headNode;}//创建结点struct Node* createNode(int data){ struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode;}void printList(struct Node* headNode){ struct Node* pMove = headNode->next; while (pMove) { printf(\”%d\\t\”, pMove->data); pMove = pMove->next; } printf(\”\\n\”);}//插入结点,参数:插入那个链表,插入结点的数据是多少void insertNodeByHead(struct Node* headNode, int data){ //1创建插入的结点 struct Node* newNode = createNode(data); newNode->next = headNode->next; headNode->next = newNode;}void deleteNodeByAppoin(struct Node* headNode, int posData){ struct Node* posNode = headNode->next; struct Node* posNodeFront = headNode; if (posNode == NULL) printf(\”无法删除链表为空\\n\”); else { while (posNode->data != posData) { posNodeFront = posNode; posNode = posNodeFront->next; if (posNode == NULL) { printf(\”没有找到相关信息,无法删除\\n\”); return; } } posNodeFront->next = posNode->next; free(posNode); }}int main(){ struct Node* list = createList(); insertNodeByHead(list, 1); insertNodeByHead(list, 2); insertNodeByHead(list, 3); printList(list); deleteNodeByAppoin(list, 2); printList(list); system(\”pause\”); return 0;}简单实用:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>struct student{ char name[20]; int num; int math;};struct Node{ struct student data; //数据域 struct Node* next; //指针域};struct Node* createList(){ struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); //headNode 成为了结构体变量 //变量使用前必须被初始化 //headNode->data = 1; headNode->next = NULL; return headNode;}//创建结点struct Node* createNode(struct student data){ struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode;}void printList(struct Node* headNode){ struct Node* pMove = headNode->next; printf(\”name\\tnum\\tmath\\n\”); while (pMove) { printf(\”%s\\t%d\\t%d\\n\”, pMove->data.name, pMove->data.num, pMove->data.math); pMove = pMove->next; } printf(\”\\n\”);}//插入结点,参数:插入那个链表,插入结点的数据是多少void insertNodeByHead(struct Node* headNode, struct student data){ //1创建插入的结点 struct Node* newNode = createNode(data); newNode->next = headNode->next; headNode->next = newNode;}void deleteNodeByAppoinNum(struct Node* headNode, int num){ struct Node* posNode = headNode->next; struct Node* posNodeFront = headNode; if (posNode == NULL) printf(\”无法删除链表为空\\n\”); else { while (posNode->data.num != num) { posNodeFront = posNode; posNode = posNodeFront->next; if (posNode == NULL) { printf(\”没有找到相关信息,无法删除\\n\”); return; } } posNodeFront->next = posNode->next; free(posNode); }}int main(){ struct Node* list = createList(); struct student info; while (1) { printf(\”请输入学生的姓名 学号 数学成绩:\”); setbuf(stdin, NULL); scanf(\”%s%d%d\”, info.name, &info.num, &info.math); insertNodeByHead(list, info); printf(\”continue(Y/N)?\\n\”); setbuf(stdin, NULL); int choice = getchar(); if (choice == \’N\’ || choice == \’n\’) { break; } } printList(list); printf(\”请输入要删除的学生的学号:\”); scanf(\”%d\”, &info.num); deleteNodeByAppoinNum(list, info.num); printList(list); system(\”pause\”); return 0;}相关视频敬请关注,私信\”视频\”可得。

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/6356.html

浅析拼图游戏中的切图核心算法思想,C语言零基础编写小案例

C语言单链表插入、删除、遍历小结

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部