C语言基础入门:链表详解篇
链表概述
链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:
一为用户需要用的实际数据,二为下一个结点的地址。因此,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。
链表的各类操作包括:学习单向链表的创建、删除、 插入(无序、有序)、输出、 排序(选择、插入、冒泡)、反序等等。
基本操作
1. 节点的构造
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#defineLEN sizeof(struct stu)structstu{
//数据char num[10];char name[20];float score;
//指针structstu*next;};
2. 建立链表
struct stu *create(){
/structstu*head;structstu*p1, *p2;
head = (struct stu *)malloc(LEN); head->next =NULL;
p1 = head;
p2 = (struct stu *)malloc(LEN);
printf("输入个人信息:学籍号、姓名和总成绩\n");
scanf("%s%s%f",p2->num, p2->name, &p2->score); getchar();
while(strcmp(p2->num,"0") !=0){/*
执行结束后
1。p2的next域为NULL.
2。第一个节点的next域指向第二个节点的数据域
3。p1指针指向第二个节点的数据域
p2->next = p1->next; p1->next = p2; p1 = p2;
p2 = (struct stu *)malloc(LEN);printf("输入个人信息:学籍号、姓名和总成绩\n");
scanf("%s%s%f",p2->num, p2->name, &p2->score); getchar(); }
free(p2);returnhead;};
3. 输出链表
void print(struct stu * head){structstu*p;
printf("num name score\n"); p = head->next;
while(p!=NULL){
printf("%-10s %-20s %-4.1f\n",p->num, p->name, p->score);
p=p->next; }}
4. 插入节点
如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)
void insert(struct stu * head, struct stu * p0)
{ struct stu *p1, *p2; p1 = head->next;p2 = head;
while((p1!=NULL) && (strcmp(p0->num, p1->num)==1))
{p2=p1; p1=p1->next; } p0->next = p2->next; p2->next = p0;}
5. 删除节点
int delete(struct stu *head,charnum[]){ structstu*p1, *p2;p1 = head->next; p2 = head;
while(p1!=NULL&&strcmp(num, p1->num)!=0)
{ p2=p1; p1=p1->next; }
if(!p1){return0; }
p2->next = p1->next;free(p1);return1;}
6. 主函数
//主函数int main()
{structstu*h, *p0;charnum[10];printf("建立链表\n");
h = create(); p0 = (struct stu *)malloc(LEN);
printf("输入待插入的个人信息:学籍号、姓名和总成绩\n");
scanf("%s%s%f",p0->num, p0->name, &p0->score);
getchar();if(strcmp(p0->num,"0") !=0){ insert(h, p0); }
printf("输入待删除个人信息的学号\n");
scanf("%s",num);if(strcmp(num,"0") !=0){delete(h, num);
}printf("输出链表\n"); print(h);return0;}
C语言基础入门:链表详解篇相关推荐
- C语言基础之操作符详解
C语言基础之操作符详解 操作符的分类 算术操作符 移位操作符 位操作符 逻辑操作符 逗号表达式 表达式求值 隐式类型转换 算术转换 操作符的属性 xwg今天就带各位大佬来了解一波C语言的操作符. 操作 ...
- Skynet基础入门例子详解(1)
Skynet 是一个轻量级的为在线游戏服务器打造的框架,它也不仅仅使用在游戏服务器领域. Skynet开源项目地址: https://github.com/cloudwu/skynet 云风大神博客: ...
- JavaScript基础入门-----万字详解
浏览器执行JS简介 浏览器分成两大部分 渲染引擎和JS 引擎 渲染引擎: 用来解析HTML与CSS,俗称内核,比如chrome浏览器的blink,老版本的webkit JS 引擎:也称为JS 解释器. ...
- Skynet基础入门例子详解(7)
GateServer的使用 skynet 提供了一个通用模板 lualib/snax/gateserver.lua 来启动一个网关服务器,通过 TCP 连接和客户端交换数据. TCP 基于数据流,但一 ...
- STM32基础入门——GPIO详解
目录 一.GPIO的简介 二.GPIO工作模式-----输入 1.浮空输入模式 2.上拉输入模式 3.下拉输入模式 4.模拟输入模式 三.GPIO工作模式-----输出 1.开漏输出模式 2.推挽输出 ...
- 【区块链开发入门】(四) Truffle详解篇2
由于本篇篇幅较长,因此转为两篇文章.Truffle详解篇篇1请见:link 目录导航页 [区块链开发入门](一) 以太坊的搭建与运行 [区块链开发入门](二) 以太坊的编程接口 [区块链开发入门](三 ...
- vue 单相绑定_Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)...
Vuejs第一篇之入门教程详解(单向绑定.双向绑定.列表渲染.响应函数) 2018-12-30 什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素 ...
- C语言结构体与指针ppt,c语言指针和结构体:链表详解.ppt
c语言指针和结构体:链表详解.ppt 1,第十一章 链表,2,例跳马.依下图将每一步跳马之后的位置x,y放到一个"结点"里,再用"链子穿起来",形成一条链,相邻 ...
- [Go语言入门] 14 Go语言goroutine和通道详解
文章目录 14 Go语言goroutine和通道详解 14.1 goroutine 14.2 通道(channel) 声明通道变量 创建通道 通道操作 14.3 管道 14.4 单向通道 14.5 通 ...
最新文章
- android连接不上socket,关于socket通信的android与pc端连接,为什么我定义的socket是为空的,连接不上pc端...
- 在 ubuntu下面利用libpcap编程
- nl.basjes.parse.useragent.UserAgentAnalyzer内存泄漏问题解决
- 直播 | AAAI 2021:自然语言中token-aware的虚拟对抗样本训练
- 密度图的密度估计_箱形图、小提琴图、直方图……统统可以卡通化!
- warning C4819 解决方案 warning C4819: The file contains a character that cannot be represented in the cu
- BP神经网络从理论到应用(一):C++实现
- Python网络爬虫入门篇
- cropper(裁剪图片)插件使用(案例)
- 最优化问题——线性规划模型
- 获取微信好友头像,对其进行相应操作
- 一年读完100本书(1/100)《微习惯》2021-01-18
- QQ Tim另存为文件时闪退,错误模块ntdll.dll
- 帮你解读身份证号码的秘密
- cshop是什么开发语言_Fecshop 多语言
- MySQL的备份、恢复
- K8S中deployment和service案例
- Win11打开安卓子系统步骤,所遇到的问题,以及解决办法
- 3dMax火离妖游戏模型过程
- 数学分析讲义习题解答:(一)
热门文章
- 苹果手机恢复出厂设置在哪里?恢复出厂设置方法介绍
- 担心手机电池寿命,专家给出正确充电方式
- chart.js使用学习——柱状图(2:常用属性设置)
- -Djava.endorsed.dirs=D:\tomcat\apache-tomcat-9.0.8\endorsed is not supported. Endorsed standards and
- 无法加载文件 C:\Users\XXX\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本
- 11.①事件冒泡:取消冒泡event.cancelBubble=true或.sopImmediatePropagation()②事件绑定addEventListener(参数1,参2,参3)③事件传播
- Mysql数据库---学习总结(一)
- java单机武侠_Java之TankWar(单机版)历程
- 7-14保持安全社交距离的重要性 最小生成树板子题
- 青岛一中2021年高考成绩查询,青岛一中2021年中考志愿填报温馨提示