c语言链表代码讲解(1个小时学会单链表)
c语言链表代码讲解(1个小时学会单链表)
课程代码资料
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; }
相关视频敬请关注,私信"视频"可得。