c语言链表编程作业,C语言编程入门——链表

链表是为克服数组的缺点,在内存空间中离散存储,但需要一个指针记住下一个结点的地址,以便可以将链表结点连接起来。

链表与数组的比较:

数组

优点:存取速度快。

缺点:插入和删除元素的效率很低;

需要一块连续的内存空间。

链表

专业术语

首节点

存放第一个有效数据的节点

尾节点

存放最后一个有效数据的节点

头结点

头结点的数据类型和首节点的类型是一样的(结构体变量类型)

头结点是首节点前面的那个节点,头结点并不存放有效数据,

设置头结点的目的是为了方便对链表的操作。

头指针

存放头结点地址的指针变量

优点:插入删除元素效率高;

不需要一块连续的很大的内存空间。

缺点:查找某个位置的元素效率低。

定义

链表的基本单元是节点,节点分为两部分:数据域和指针域,数据域用来存放有效数据,指针域存

放下一个节点的地址。所以链表的节点都是结构体变类型。

用创建链表时,链表必须为动态创建,以便其它函数对其进行操作。

要确定一个链表,只需链表的头指针即可,即函数参数只需一个。

链表的实现:

# include

# include

# include

struct Node //通过结构体定义节点

{

int data; //创建数据域

struct Node * pNext; //创建指针域

};

//函数声明

struct Node * CreateList(void);

void TraverseList(struct Node *);

bool isEmpty(struct Node *);

int main(void)

{

struct Node * pHead; //创建头指针,用来存放头结点的地址。

pHead = CreateList(); //CreateList()函数动态创建链表并返回头结点的地址。

printf("\n");

TraverseList(pHead); //函数参数只需头指针即可确定一个链表。

return 0;

}

struct Node * CreateList(void) //函数返回值为struct Node * 类型。

{

int len;

int i;

int val;

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

if (NULL == pHead)

{

printf("分配头结点空间失败,程序终止!\n");

exit(-1); //exit函数,退出程序。

}

struct Node * pTail = pHead; //创建尾指针指向尾节点

pTail->pNext = NULL;

printf("请输入链表的节点个数:len = ");

scanf("%d", &len);

for (i=0; i

{

printf("请输入第%d个节点的值:", i+1);

scanf("%d", &val);

struct Node * pNew = (struct Node *)malloc(sizeof(struct Node)); //链表的不连续性在于它的内存空间在不断地一个个分配,而数组则是一次性分配完成。

if (NULL == pNew)

{

printf("分配空间失败,程序终止!\n");

exit(-1);

}

pNew->data = val;

pTail->pNext = pNew;

pNew->pNext = NULL;

pTail = pNew; //递归

}

return pHead;

}

void TraverseList(struct Node * pHead) //遍历输出

{

struct Node * p;

if (isEmpty(pHead))

{

printf("链表为空!\n");

}

else

{

p = pHead->pNext; //使指针指向下一个节点

printf("链表中的数据为:\n");

while (NULL != p)

{

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

p = p->pNext;

}

printf("\n");

}

return;

}

bool isEmpty(struct Node * pHead)

{

if (NULL == pHead)

return true;

else

return false;

}

应用实例:学生信息管理系统

# include

# include

struct Student

{

char name[20];

int age;

float score;

};

void Input(struct Student *, int);

void sort(struct Student *, int);

void Output(struct Student *, int);

int main(void)

{

int len;

struct Student * pArr;

printf("请输入学生的个数:\n");

printf("len = ");

scanf("%d", &len);

pArr = (struct Student *)malloc(len*sizeof(struct Student));

Input(pArr, len);

sort(pArr, len);

printf("\n\n");

printf("排序结果是:\n");

Output(pArr, len);

return 0;

}

void Input(struct Student * pArr, int len)

{

int i;

for (i=0; i

{

printf("请输入第%d个学生的信息:\n", i+1);

printf("name = ");

scanf("%s", pArr[i].name); //结构体中name成员本身为数组,数组名name即为第一个元素的地址,不需要加&

printf("age = ");

scanf("%d", &pArr[i].age);

printf("score = ");

scanf("%f", &pArr[i].score);

}

}

void sort(struct Student * pArr, int len)

{

int i, j;

struct Student t;

for (i=0; i

{

for (j=0; j

{

if (pArr[j].score < pArr[j+1].score)

{

t = pArr[j];

pArr[j] = pArr[j+1];

pArr[j+1] = t;

}

}

}

}

void Output(struct Student * pArr, int len)

{

int i;

for (i=0; i

{

printf("第%d名学生的信息是:\n", i+1);

printf("name = ");

printf("%s",pArr[i].name);

printf("\n");

printf("age =");

printf("%d", pArr[i].age);

printf("\n");

printf("score = ");

printf("%f", pArr[i].score);

printf("\n");

}

}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round #233 (Div. 2)D. Painting The Wall 概率DP

D. Painting The WallUser ainta decided to paint a wall. The wall consists of n2 tiles, that are arranged in an n  n table. Some tiles are painted, and the others are not. As he wants to paint it beautifully, he will follow the rules below. Firstly user a…

ahp层次分析法_基于层次分析法(AHP)的店铺选址应用研究

导读在连锁行业&#xff0c;店铺选址是其中很重要的一个方面。影响店铺选址的指标(因素)很多&#xff0c;决策中经常需要对店铺影响各指标进行量化分析。本文应用层级分析法(AHP)&#xff0c;对影响店铺选址的指标(因素)权重进行量化分析&#xff0c;以帮助决策者从备选的多个店…

html页面刷新回到顶部_页面刷新后,使页面自动滚回到顶部

比如有一个页面&#xff0c;滚动条在body上&#xff0c;当页面滚动到下方时&#xff0c;如何在刷新后使页面滚动回初始位置&#xff1f;已尝试但是失效的方案&#xff1a;$("body").scrollTop(0);window.scrollTo(0,0);document.body.scrollTop0;除了页面跳转&#x…

当c语言表达式中同时有字符 整数,c语言第2章数据类型、运算符与表达式a.ppt

c语言第2章数据类型、运算符与表达式aC语言程序设计;本章主要学习任务;2.1 C的数据类型;注意&#xff1a;C语言中的数据有变量与常量&#xff0c;它们分别属于上述这些类型。;2.2 常量与变量;不是C语句&#xff0c;不必在行末加分号。该命令是用标识符代替一个字符串&#xff0…

构造函数和clone以及在继承中

构造函数 类实例的构造创建过程是: 1.属性域被初始化为默认值(0,false,null) 2.按照在类声明的顺序初始化初始化语句和初始化块. 3.执行构造函数 所以,一个默认的空的无参构造函数并没有初始化类的实例域.因为实例域先于构造而初始化完毕了.构造函数无法被继承如果一个类没有定…

python批量删缩进_鬼畜小姐姐+野狼disco,十分钟教你如何用Python剪辑一个牛逼的抖音小视频?...

鬼畜小姐姐野狼disco&#xff0c;十分钟教你如何用Python剪辑一个牛逼的抖音小视频&#xff1f;前言半个月前&#xff0c;后台有个小伙伴问我&#xff0c;如何将视频中的音频提取出来&#xff0c;并且将声音转成文字写入到 word 中&#xff0c;正好接下来的文章要用到百度的语音…

web无序列表去掉点_无序列表排序之方法

利用jQuery对无序列表排序的原理是&#xff1a;获取到无序列表中的所有列表项&#xff0c;并转成数组形式&#xff0c;使用JavaScript函数对其进行排序后再次输出。其中使用到的jQuery函数有ready()、get()、text()、each()、append()和JavaScript函数sort()。1&#xff0e;jQu…

c语言编程怎么实现替换,使用C语言实现字符串中子字符串的替换

描述&#xff1a;编写一个字符串替换函数&#xff0c;如函数名为 StrReplace(char* strSrc, char* strFind, char* strReplace)&#xff0c;strSrc为原字符串&#xff0c;strFind是待替换的字符串&#xff0c;strReplace为替换字符串。举个直观的例子吧&#xff0c;如&#xff…

数据结构:点之间的最短距离--Floyd算法

Floyd算法 Floyd算法 Dijkstra算法是用于解决单源最短路径问题的&#xff0c;Floyd算法则是解决点对之间最短路径问题的。Floyd算法的设计策略是动态规划&#xff0c;而Dijkstra採取的是贪心策略。当然&#xff0c;贪心算法就是动态规划的特例。 算法思想 点对之间的最短路径仅…

shell 获取家目录_一篇教会你写90%的shell脚本

shell是外壳的意思&#xff0c;就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统&#xff0c;比如Linux中的Shell命令就包括ls、cd、pwd等等。总结来说&#xff0c;Shell是一个命令解释器&#xff0c;它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行…

数据结构c语言版第四章题库,数据结构(C语言版)(第4版)习题

数据结构(C语言版)(第4版)习题 习题 11.1 选择题。(1)计算机识别、存储和加工处理的对象统称为 。A&#xff0e;数据 B.数据元素 C.数据结构 D.数据类型(2)数据结构通常是研究数据的 及它们之间的联系。A&#xff0e;存储和逻辑结构 B.存储和抽象 C.理想和抽象 D.理想和逻辑(3)…

C++刷称号——2707: 素数与要素

Description 从键盘输入的随机整数n&#xff0c;如果n不是质数&#xff0c;然后计算n所有的因素&#xff08;不含1&#xff09;。例如&#xff0c;对于16&#xff0c;出口2,4,8&#xff1b;否则输出“It is a prime number.” 推断素数和需求因素已完成功能。 Input 随机整数n …

通州区机器人比赛活动总结_马驹桥镇中心小学在2017通州区青少年机器人竞赛中勇创佳绩...

2017年2月26日&#xff0c;北京市通州区马驹桥镇中心小学在“2017通州区青少年机器人竞赛”中取得优异的成绩。来自通州区29所中小学的218选手参加了此次比赛&#xff0c;共有6项机器人挑战赛&#xff1a;ASC项目、WER项目、FLL项目、综合技能项目、VEX项目、创意项目。马驹桥镇…

python opencv输出mp4_Python玩转视频处理(四):视频按场景进行分割

在上一篇文章&#xff08;python在手&#xff0c;女神视频轻松有&#xff09;分享了用AI人脸识别技术标记人物出现时间点来截取视频片段的教程&#xff0c;它的局限性在于只能通过识别特定的对象&#xff08;比如人脸&#xff09;来操作。在本文中将分享一个按场景进行分割视频…

lvm 扩展根目录_转://如何增加linux根目录的磁盘空间(基于LVM)?

问题引出&#xff1a;在测试过程中替换so文件&#xff0c;报磁盘空间不足的错误。▲问题分析&#xff1a;由于当时系统部署架构的考虑&#xff0c;把软件和数据库部署在了同一台机器上&#xff0c;并且给了30G的磁盘空间。系统上占用磁盘空间的有2部分&#xff0c;一是软件本身…

图形基本变换c语言代码,图形变换-C语言课程设计.doc

学号《》课程设计报告图形变换网络工程班级&#xff1a;16(3)姓名&#xff1a;指导教师&#xff1a;成绩&#xff1a;计算机学院2017 年 5月 10日目录- 1 -1 设计要求- 2 -2 程序功能- 2 -3 核心算法- 2 -4 程序代码- 2 -5 运行结果- 2 -6 程序创新说明- 3 -参考文献- 3 -C语言…

stm32 isp下载官方软件android_OpenCanvas免费版下载_OpenCanvas绘图软件官方版下载7.0.25...

OpenCanvas 是一款小巧的CG手绘软件&#xff0c;让用户在使用数位板在电脑上绘图时&#xff0c;就像是在纸上手绘一样&#xff0c;可以画出极为细致的图像。OpenCanvas功能简捷、体积小巧、运行速度快&#xff0c;大家可以很快上手&#xff0c;非常适合入门级手绘爱好者使用。对…

centos7限制cpu使用_CentOS7 CPU隔离配置

1. 修改grubCentOS7中grub存放位置在&#xff1a;/etc/default/grub初始内容如下&#xff1a;1 [rootdellserver default]# catgrub2 GRUB_TIMEOUT53 GRUB_DISTRIBUTOR"$(sed s, release .*$,,g /etc/system-release)"4 GRUB_DEFAULTsaved5 GRUB_DISABLE_SUBMENUtrue…

c语言solaris中图形库,成功弄出simics下的CDE登录界面,与大家分享

simics下的cde可以在安装的时候&#xff0c;就启动图形console进行安装&#xff0c;让installer自动配置图形console&#xff0c;也可以先用默认的text console进行安装&#xff0c;之后再进行配置。我用的方法是先用text console安装&#xff0c;安装完成后再启动图形console。…

【转】图文详解YUV420数据格式

YUV格式有两大类&#xff1a;planar和packed。 对于planar的YUV格式&#xff0c;先连续存储所有像素点的Y&#xff0c;紧接着存储所有像素点的U&#xff0c;随后是所有像素点的V。对于packed的YUV格式&#xff0c;每个像素点的Y,U,V是连续交*存储的。 YUV&#xff0c;分为三个分…