数据结构无头结点单向不循环链表(C语言版)

main.c(负责测试)

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "nohead.h"
int main()
{LNode *list = NULL;struct score_st data[10],mydata,data1;int i = 0;srand((unsigned)time(NULL));//初始化数组for (i = 0; i < 10; i++){data[i].chinese = rand() % 100;data[i].english = rand() % 100;data[i].math = rand() % 100;data[i].student_id = i;snprintf(data[i].name, 32, "学生的名字是%d", i);}data1.chinese = rand() % 100;data1.english = rand() % 100;data1.math = rand() % 100;data1.student_id = 100;snprintf(data1.name, 32, "学生的名字是%d", 100);//打印链表中的数据list_display(list);//链表中插入数据,头部插入,无头节点单向不循环链表for (i = 0; i < 10; i++){list_insert(&list, &data[i]);}list_display(list);//查找id = 3的学生信息list_find(list,3,&mydata);printf("%4s %20s %4s %4s %4s\n", "学号", "姓名", "数学", "语文", "外语");printf("%4d %20s %4d %4d %4d\n", mydata.student_id,mydata.name, mydata.math, mydata.chinese,mydata.english);//删除链表中的第一个有效节点(单向不循环无头节点链表)//list_delete(&list);//list_display(list);list_insert_at(&list,0,&data1);list_display(list);list_destroy(list);
}

nohead.c(负责函数实现)

#include<stdio.h>
#include<stdlib.h>
#include "nohead.h"int list_insert_at(struct LNode **list,int i, struct score_st *data)
{struct LNode *node = *list,*newnode = NULL;int j = 0;if (i < 0){return -1;}if (i == 0){newnode = (LNode*)malloc(sizeof(LNode));if (newnode == NULL){return -3;}newnode->score = *data;newnode->next = *list;*list = newnode;return 0;}//找到第i-1个有效节点while ((j < i-1)&&(node!=NULL)){node = node->next;j++;}if (node == NULL){return -2;}newnode = (LNode*)malloc(sizeof(LNode));if (newnode == NULL){return -3;}newnode->score = *data;newnode->next = node->next;node->next = newnode;return 0;
}int list_insert(struct LNode **list, struct score_st *data)
{LNode *newnode = NULL;newnode = (LNode*)malloc(sizeof(LNode));if (newnode == NULL)return -1;newnode->score = *data;newnode->next = *list;*list = newnode;
}void list_display(LNode *list)
{LNode *ps = list;if (ps == NULL){printf("链表为空\n");return -1;}printf("学生的信息如下:\n");printf("%4s %20s %4s %4s %4s\n", "学号", "姓名", "数学", "语文", "外语");while (ps){printf("%4d %20s %4d %4d %4d\n", ps->score.student_id,ps->score.name, ps->score.math, ps->score.chinese,ps->score.english);ps = ps->next;}
}int list_find(LNode *ps,int id,struct score_st *data)
{while (ps){if (ps->score.student_id == id){*data = ps->score;return 0;}ps=ps->next;}return -1;
}//删除无头节点链表中第一个有效节点
int list_delete(LNode **ps)
{LNode* curnode = *ps;if (*ps == NULL){printf("链表为空删除失败\n");return -1;}(*ps) = curnode->next;free(curnode);return 0;
}void list_destroy(LNode *p)
{LNode *nextnode = NULL;while (p){nextnode = p->next;free(p);p = nextnode;}}

nohead.h(负责函数声明)

#ifndef NOHEAD_H__
#define NOHEAD_H__
#define MAX_SIZE 32
//定义结构体类型,保存学生成绩
struct score_st
{char name[MAX_SIZE];int student_id;int math;int chinese;int english;
};
typedef struct LNode
{struct score_st score;struct LNode *next;
}LNode;
//无头节点单向不循环链表,在链表头部插入数据,第一个有效节点的下标为0
int list_insert(struct LNode *list, struct score_st *score);
//按位置插入节点
int list_insert_at(struct LNode **list, int i, struct score_st *data);
void list_display(LNode *list);
int list_delete(LNode **ps);
void list_destroy(LNode *list);
//查找id==**的结点
int list_find(LNode *ps, int id,struct score_st *data);
#endif

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

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

相关文章

ad network

全称&#xff1a;Advertising network。即“在线广告联盟”。一种介于想出售广告空间的网站与想在网站上刊登广告的广告主之间的平台。比较知名的公司有Google的AdSense、好耶、仁合传媒、传漾Adsame以及ValueClick等 Ad Network的本质真相是什么? 随视传媒COO薛晨女士在11月1…

python123查找指定字符输入m_大数据应用人才培养系列教材 Python语言 刘 鹏 张 燕 总主编 李肖俊 主编 刘 河 钟 涛 副主编....

Presentation on theme: "大数据应用人才培养系列教材 Python语言 刘 鹏 张 燕 总主编 李肖俊 主编 刘 河 钟 涛 副主编."— Presentation transcript:大数据应用人才培养系列教材 Python语言 刘 鹏 张 燕 总主编 李肖俊 主编 刘 河 钟 涛 副主编第五章 字符串与正则…

C#生成带Logo二维码

1.下载ThoughtWorks.QRCode引用并添加在工程中 2.在实现类QRCodeEncoderDemo中引入Dll&#xff0c;添加方法 using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Drawing2D;using System.Linq;using System.Web;using ThoughtWorks.QRC…

【原】基础篇:第一篇,本节主要向大家介绍Ext的最基础的话题

http://www.cnblogs.com/mogen_yin/archive/2009/04/30/1447236.html ExtJS是一个Ajax框架&#xff0c;是一个用javascript写的&#xff0c;用于在客户端创建丰富多彩的web应用程序界面。ExtJS可以用来开发RIA也即富客户端的AJAX应用 ExtJS是一个用javascript写的&#xff0c;主…

linux_base-f10-10_7 linuxulator is not (kld)loaded

# cd linux_base-f10/# make install clean> linux_base-f10-10_7 linuxulator is not (kld)loaded.*** Error code 1 解决办法&#xff1a;kldload linux 再重新执行make install clean命令即可。转载于:https://www.cnblogs.com/seasonsstory/p/3148870.html

margin的缩写

margin:0px;//页面内容距离浏览器边框的距离均为0px&#xff1b; margin:0px 5px;网页内容距离浏览器边框上下0px。左右5px margin&#xff1a;0px 10px 5px&#xff1b;//上0 &#xff0c;下10&#xff0c;左右5px margin:0px 1px 2px 3px;//上 右 下 左 0 1 2 3px; 其他的类…

前后端分离的项目部署到tomcat_如何在开发时部署和运行前后端分离的JavaWeb项目...

在开发中大型的JavaEE项目时&#xff0c;前后端分离的框架逐渐成为业界的主流&#xff0c;传统的单机部署前后端在同一个项目中的工程项目越来越少。这类JavaWeb项目的后端通常都采用微服务的架构&#xff0c;后端会被分解为诸多个小项目&#xff0c;然后使用dubbozookeeper或者…

51单片机实现三位十进制数加减乘除运算

51单片机实现三位十进制数加减乘除运算 一.题目 51单片机IO接口作业 请将附件给出的Proteus图用51单片机完成一个计算器功能。 1、显示采用动态分时8位共阳数码管输出。 2、采用4*4矩阵键盘输入&#xff0c;键盘上已经标识对应键。 3、完成三位十进制数的加、减、乘、除运…

未能加载文件或程序集“Microsoft.Office.Interop.Owc11, Version=11.0.0.0, ...”或它的某一个依赖项~[解决方案]...

配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。 分析器错误信息: 未能加载文件或程序集“Microsoft.Office.Interop.Owc11, Version11.0.0.0, Cultureneutral, PublicKeyToken71e9bce111e9429c”或它的某一个…

方法javaJVM学习笔记-内存处理

本文是一篇关于方法java的帖子 大多数JVM将内存区域分离为Method Area&#xff08;Non-Heap&#xff09;&#xff0c;Heap&#xff0c;Program Counter Register&#xff0c;Java Method Statck&#xff0c;Native Method Stack和Direct Memomry&#xff08;备注&#xff1a;Di…

IPSEC ***两个阶段的协商过程

IPSEC 两个阶段的协商过程 第一阶段 有主模式和积极模式2种 注意!!!只有remote ***和Easy ***是积极模式的,其他都是用主模式来协商的 让IKE对等体彼此验证对方并确定会话密钥,这个阶段用DH进行密钥交换,创建完IKE SA后,所有后续的协商都将通过加密和完整性检查来保护 phase 1帮…

数据结构单向不循环链表实现多项式合并

多项式合并 思路 多项式合并 P1 5 2x 8x ^8 3x^16 P2 6x 16x^6 - 8x^8 P P1 P2 5 8x 16x^6 3x^16 使用带头结点的单向不循环链表 每个节点分为三个部分&#xff0c;系数项&#xff0c;指数项&#xff0c;指针域 结构体表示为 struct node_st {int exponent;int …

解决Warning: Cannot modify header information – headers already sent by

Warning: Cannot modify header information – headers already sent by….这类语句&#xff0c;造成这个原因是因为setcookie语句的问题。 上网找了半天&#xff0c;有人说要在文件开头写上ob_start(); output_buffering 改成4096 也失败失败。 后来打开 php.ini 然后把 outp…

下 终端_Linux/UNIX 下终端复用利器 tmux

tmux 是一个终端复用器(terminal multiplexer)。简介tmux 是一个终端复用器类自由软件&#xff0c;功能类似 GNU Screen&#xff0c;但使用 BSD 许可发布。用户可以通过 tmux 在一个终端内管理多个分离的会话&#xff0c;窗口及面板&#xff0c;对于同时使用多个命令行&#xf…

约瑟夫环(杀人游戏)

问题描述&#xff1a; 刚学数据结构的时候&#xff0c;我们可能用链表的方法去模拟这个过程&#xff0c;N个人看作是N个链表节点&#xff0c;节点1指向节点2&#xff0c;节点2指向节点3&#xff0c;……&#xff0c;节点N - 1指向节点N&#xff0c;节点N指向节点1&#xff0c;这…

oracle insert两个关联表

现有一张老师学生表(tb_tea_cou)&#xff0c;由于业务需要&#xff0c;需把老师学生表tb_tea_stu拆分成两张表(tb_tea、tb_cou)&#xff0c;并把记录insert到这两张子表中(tb_tea、tb_cou为关联的两张表)。 表结构如下&#xff1a;tb_tea_cou( id, //pk name, //任课老师 …

消失的字符串——c语言函数中的数据存储方式以及字符串实现

2019独角兽企业重金招聘Python工程师标准>>> 事情是这样的&#xff0c;最近在学习翁老师的Mooc之C语言程序设计&#xff0c;插一句&#xff0c;真的是好老师&#xff0c;讲的真的太好了&#xff0c;在c里的字符串这里&#xff0c;翁老师演示了一个小程序&#xff0c…

JQuery 文本框高亮显示插件

以前使用Mootools Js框架&#xff0c;文本框有个$(id).highlight()高亮方法&#xff0c;使其高亮显示&#xff0c;效果如下&#xff1a; JQuery 中没有这个方法&#xff0c;自己今天写了一个Plugin&#xff0c;把代码贴出来分享一下&#xff1b; 代码如下&#xff1a; jquery-h…

优秀工程师应该具备哪些素质_一名优秀工程师所需要具备的条件和素质[1]

一名优秀工程师所需要具备的条件和素质碰到一个不相熟的人。“上学还是工作&#xff1f;(我看起来还不算老嘛)”“工作了&#xff0c;一年多一点。”“做什么的&#xff1f;”“半导体行业的。”“哦&#xff0c;具体做什么呢&#xff1f;”“嗯......工程师。”工程师——这就…

链方法[C# 基础知识系列]专题三:如何用委托包装多个方法——委托链

最近研究链方法&#xff0c;稍微总结一下&#xff0c;以后继续补充&#xff1a; 弁言&#xff1a; 上一专题分析了下编译器是如何来翻译委托的&#xff0c;从中间语言的角度去看委托&#xff0c;希望可以帮助大家进一步的理解委托&#xff0c;然而之前的分析都是委托只是封装一…