*******************************什么是结构体********************************************************

*****************************************************************************************************

#include<stdlib.h>
#include<stdio.h>
//什么是数据结构
//这里声明了一个结构 horse
//horse 不是一个变量名,是一个新的类型。
//horse 通常称为 结构标记符(struct tag) 或 标记符名称(tag name)
//结构标记符的命名方式和我们熟悉的变量名相同 名字最好不要相同/*结构的定义 用分号结*/
struct horse
{
//结构内的成员类型:可以是任何类型的变量,包含数组
//成员的声明:与变量的声明一样 先声明类型 然后声明名称 然后分号结束。int age;  //age hieght 称为数据成员int height;char name[20];char father[20];char mother[20];
}Dobbin = {      //Dobbin 是结构变量 名称24,17,"Dobbin","Trigger","Flossie"
};/*未命名的结构*/
//以下结构没有指定标记符名称。用一条语句声明结构和该结构的实例时,可以省略标记符名字。
struct{int age;int height;char name[20];
//缺点:不能在其他语句中定义这个结构的其他实例,
//这个结构的所有变量必须在一行语句中定义。
}Hei;//结构的声明 与 结构变量的声明分开
//上面的结构中去掉Dobbin后为,定义结构标记符horse;下面声明该类型的变量Jack
/*结构变量声明语句 用分号结束*/
struct horse Jack = {12,23,"Jack","Ack","Jac"};/*访问数据成员*/
//结构变量名称 .(成员选择运算符) 数据成员名称
//Dobbin.age = 20; /*使用结构*/
int main()
{struct horse my_first_horse;printf("Enter the name of the Dobbin\n");
//&(寻址运算符) 结构成员name是一个数组,所以将数组的第一个元素的地址隐式传送给函数scanfscanf("%s",my_first_horse.name);printf("Enter the name of the Dobbin\n");scanf("%d",&my_first_horse.age);printf("%s is %d years old.\n",my_first_horse.name,my_first_horse.age);return 0;
}

*******************************一个结构作为另一个结构的成员**************************************

****************************************************************************************************

#include<stdio.h>
//保存日期的结构
struct Date
{int day;int month;int year;
};
//定义结构horse,其中包含出生日期变量。
struct horse
{
//结构中的结构的声明:若Data的定义在horse内部,在结构体外使用data会报错struct Date dob; //将一个结构作为另一个结构的成员int height;char name[20];char father[20];char mother[20];
};
//接下来用通常的语句定义一个horse结构的实例
struct horse Dobbin;Dobbin.height  = 20;
Dobbin.dob.day = 5;
Dobbin.dob.month = 12;
Dobbin.dob.year = 1889;

****************************************单向链表的实现*******************************

***************************************************************************************

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
//链表的特点:内存的使用和便于处理,存储和处理链表所占用的内存量少,即使所使用的内存比较分散,也可以从一个结构进入到下一个结构。链表数据处理的速度比较慢
struct horse
{int age;int height;char name[20];char father[20];char mother[20];struct horse *next;
};
struct horse *first = NULL;
struct horse *current = NULL;
struct horse *previous = NULL;
int main()
{char test = '\0';for( ; ; ){printf("Do you want to enter datails of a%s horse(Y or N)?",first != NULL?"nother":"");scanf(" %c",&test);if(tolower(test) == 'n')break;
//malloc()函数返回的是一个viod指针,因此必须用表达式(struct horse *)将它转换成所需要的类型,这样这个指针就可正确的递增或者递减了。    current = (struct horse*)malloc(sizeof(struct horse));if(first == NULL)first = current;
//如果有下一个结构,就必须将next指针指向这个结构,但只要有下一个结构,就可以确定其地址。
//因此,在第二次后续的迭代中,应该将当前结构的地址存储到前一个结构的next成员中,前一个节后的地址存放在previous指针中。if(previous != NULL)previous->next = current;printf("\n Enter the name of the horse:");scanf("%s",current->name);printf("\nHow old is %s",current->name);scanf("%d",¤t->age);printf("\nHow height is %s (in hands)?",current->name);scanf("%d",¤t->height);printf("\nWho is %s`s father?",current->name);scanf("%s",current->father);printf("\nWho is %s`s mather?",current->name);scanf("%s",current->mother);
//在current指向的结构中,next指针指定成NULL,表示这是最后一个结构,没有下一个结构了。
//指针的previous设定成current,然后进入下一次迭代,此时current指向的数据结构就是previous指向的结构了。current->next = NULL;previous = current;}current = first;while(current != NULL){printf("\n\n%s is %d years old,%d hands high,",current->name,current->age,current->height);printf(" and has %s and %s as parents.\n",current->father,current->mother);previous  = current;current = current->next;free(previous);}return 0;
}

****************************************************双向链表的实现************************************************

********************************************************************************************************************

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
//链表的特点:内存的使用和便于处理,存储和处理链表所占用的内存量少,即使所使用的内存比较分散,也可以从一个结构进入到下一个结构。链表数据处理的速度比较慢
struct horse
{int age;int height;char name[20];char father[20];char mother[20];struct horse *next;//pointer to next structurestruct horse *previous;//pointer to previous structure
};
struct horse *first = NULL;
struct horse *current = NULL;
struct horse *last = NULL;
int main()
{char test = '\0';for( ; ; ){printf("Do you want to enter datails of a%s horse(Y or N)?",first != NULL?"nother":"");scanf(" %c",&test);if(tolower(test) == 'n')break;current = (struct horse*)malloc(sizeof(struct horse));if(first == NULL){first = current;current->previous=NULL;}else{last->next = NULL;current->previous = last;}
//如果有下一个结构,就必须将next指针指向这个结构,但只要有下一个结构,就可以确定其地址。
//因此,在第二次后续的迭代中,应该将当前结构的地址存储到前一个结构的next成员中,前一个节后的地址存放在previous指针中。printf("\n Enter the name of the horse:");scanf("%s",current->name);printf("\nHow old is %s",current->name);scanf("%d",¤t->age);printf("\nHow height is %s (in hands)?",current->name);scanf("%d",¤t->height);printf("\nWho is %s`s father?",current->name);scanf("%s",current->father);printf("\nWho is %s`s mather?",current->name);scanf("%s",current->mother);
//在current指向的结构中,next指针指定成NULL,表示这是最后一个结构,没有下一个结构了。
//指针的previous设定成current,然后进入下一次迭代,此时current指向的数据结构就是previous指向的结构了。current->next = NULL;last = current;}while(current != NULL){printf("\n\n%s is %d years old,%d hands high,",current->name,current->age,current->height);printf(" and has %s and %s as parents.\n",current->father,current->mother);last = current;current = current->previous;free(last);}return 0;
}

数据结构 结构的声明 一个结构作为另一个结构的成员 单向链表的实现 双向链表的实现相关推荐

  1. 6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: ```cpp struct stu

    6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node *c ...

  2. 数据结构--链表--判断一个字符串是否为回文串(单向链表,双向链表)

    回文串为首尾对称的字符串: 如a,aba,abba等 单链表思路 1.将字符读入链表 2.找到链表中点 3.将链表从中点断开成2条,将后半条反转 4.比较两条链表是否相等(比较次数以少的为准(长度为奇 ...

  3. c++使用单向链表存储一组有序数据_数据结构笔试题基础

    第一章 数据结构与算法 一.算法的基本概念 计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法. 1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报. 2.算法的基本要素:算法中对 ...

  4. 【数据结构与算法】详解什么是图结构,并用代码手动实现一个图结构

    本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接 https://github.com/Lpyexplo ...

  5. 已知p是一个指向类a的数据成员m的指针_第三十八章、结构体指针、单向链表简介...

    最近比较忙,一下子有好几天没更新了,今天我们先来了解下结构体指针. 和普通的指针一样,结构体指针就是指向结构体变量的指针. 结构体指针指向的是结构体变量的起始位置. 1. 声明结构体指针 我们用一幅图 ...

  6. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

  7. c语言 结构体声明和引用、,结构体的声明与自引用

    今天上了数据结构课程的第一堂课,经常会看到下面这种语法:结构体有个成员变量是指向该结构体的指针,也就是自引用(self reference).翻看了下一章节内容,才知道这是链表的结构基础.平时C语言用 ...

  8. 【数据结构】CH2 线性表的链式存储结构

    目录 一.链表概述 1.相关定义 二.单链表 1.插入和删除节点的操作 (1)插入结点 (2)删除结点 2.建立单链表 (1)头插法 (2)尾插法 3.线性表基本运算在单链表中的实现 (1)初始化线性 ...

  9. 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码

    数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...

最新文章

  1. ASM丢失disk header导致ORA-15032、ORA-15040、ORA-15042 Diskgroup无法mount
  2. Turtle库的学习积累
  3. connect: 网络不可达_Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制
  4. linux uucp 改为 root,ubuntu 10.04 /etc目录下找不到vsftpd.user_list和vsfepd.ftpusers两个文件?...
  5. SpringCloud工作笔记053---SLF4J简介与使用(整合log4j_并切换logging)
  6. 使用JavaScript重定向URL参数
  7. React全家桶项目
  8. MySQL双主(master-master)补充
  9. 谷歌 Provisional headers are shown 和360急速模式 网络连接错误
  10. getBoundingClientRect方法获取元素在页面中的相对位置
  11. ios打包时候提示三方文件库错误,整理下解决的思路
  12. TGS.Avizo.v5.0 1CD
  13. 键盘鼠标录制哪个好用_美商海盗船Scimitar RGB Elite鼠标体验:再多技能也怕这把弯刀...
  14. 《Visual Basic.Net 循序渐进》
  15. 中国IT风险投资机构
  16. 市民注意啦 这3组家用无线路由器未达国家标准
  17. ArcGIS已知经纬度范围裁剪图像的步骤
  18. “阿里云大数据技术实战训练营”江苏省大学生万人计划学术冬令营活动成功举行...
  19. 亚丁号云控之发布云控地址
  20. DaoCloud丨云原生边缘计算产业发展现状与趋势展望

热门文章

  1. Java理论知识及面试题
  2. show processlist结果筛选(转)
  3. CSAPP(8):系统级IO
  4. cordova常用命令
  5. Minimum Depth of Binary Tree
  6. 解决VS2008 开发Windows Mobile 项目生成速度慢的问题
  7. hibernate annotations和hbm.xml配置文件在spring中的并存配置
  8. java实现qq_java实现的类似qq聊天系统
  9. CentOS 搭建svn服务器
  10. java实现zip与unzip