数据结构:动态内存分配+内存分区+宏+结构体

这篇具有很好参考价值的文章主要介绍了数据结构:动态内存分配+内存分区+宏+结构体。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、作业

1.定义一个学生结构体,包含结构体成员:身高,姓名,成绩;定义一个结构体数组有7个成员,要求终端输入结构体成员的值,根据学生成绩,进行冒泡排序。

#include <stdio.h>
#include <string.h>
typedef struct {
	int high;
	char name[10];
	float score;
}stu;
int main(int argc, const char *argv[])
{
	int i,j;
	stu temp; //其中的temp需要类型重定义
	stu arr[7]={{100,"1",95},{110,"2",84},{120,"3",70},{130,"4",42},{140,"5",99},{150,"5",77},{160,"6",66}};
	for(i=1;i<7;i++){
		for(j=0;j<7-i;j++){
			if(arr[j].score>arr[j+1].score){
				temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}
	}
	for(i=0;i<7;i++){
		printf("%d %s %f\n",arr[i].high,arr[i].name,arr[i].score);
	}
	return 0;
} 

数据结构:动态内存分配+内存分区+宏+结构体,算法,数据结构,c#

二、知识回顾 

1.申请一个10个int类型的堆区空间,并实现选择排序(需要导入头文件 #include <stdlib.h>)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//申请一个10个int类型的堆区空间,并实现选择排序
int main(int argc, const char *argv[]){
	int *p=(int *)malloc(sizeof(int)*10);
	int i,j,index,temp;
	for(i=0;i<10;i++){
		printf("请输入数字\n");
		scanf("%d",(p+i));
	}
	for(i=0;i<10;i++){
		index=i;
		for(j=i;j<10;j++){
			if(*(p+j)>*(p+index))
				index=j;
		}
		temp=*(p+i);
		*(p+i)=*(p+index);
		*(p+index)=temp;
	}
	for(i=0;i<10;i++){
		printf("%d\n",*(p+i));
	}

	free(p);
	return 0;
}

2.用##拼接带参宏的参数

#include <stdio.h>
#include <string.h>
//用##实现字符串的拼接
#define unit_32 unsigned int
#define TYPE(a,b) a##b
int main(int argc, const char *argv[])
{
	TYPE(unit,_32) a=100;
	//unit_32 a=100
	//unsigned int a=100
	printf("%d\n",a);
	return 0;
}

3.宏函数(最后一行作为返回值,不需要return)

#include <stdio.h>
#include <string.h>
#define MAX(a,b) ({if(a>b) ret = a; else ret=b; ret;})

int main(int argc, const char *argv[])
{
	int ret;
	printf("%d\n",MAX(90,78));
	return 0;
}

4.访问结构体成员

4.1通过结构体变量访问
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
		char name[100];
		char sex;
		int high;
		int score;
}stu,*stu_p;

int main(int argc, const char *argv[])
{ //指针指向桟区申请的空间
	stu s1;
	//strcpy(s1.name,"lisi");
	//s1.name="lisi"; 这是错误的,不能给数组赋值,数组名代表的是数组首地址,是一个常量,不能给常量赋值
	scanf("%s",s1.name);
	s1.sex='m';
	printf("%s\n",s1.name);

	return 0;
}
4.2通过结构体指针间接访问结构体成员
法一:用指针指向栈区申请的空间
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
		char name[100];
		char sex;
		int high;
		int score;
}stu,*stu_p;

int main(int argc, const char *argv[])
{ //指针指向桟区申请的空间

	stu s1;
	stu_p p=&s1;
	(*p).high=100;
	//strcpy(p->name,"lisi");
	//s1.name="lisi"; 这是错误的,不能给数组赋值,数组名代表的是数组首地址,是一个常量,不能给常量赋值
	scanf("%s",p->name);
	p->sex='m';
	printf("%s\n",s1.name);


	return 0;
}

法二:指针指向堆区申请的空间

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
		char name[100];
		char sex;
		int high;
		int score;
}stu,*stu_p;

int main(int argc, const char *argv[])
{ 

	//指针指向堆区申请的空间
	stu_p p=(stu_p)malloc(sizeof(stu));
	gets(p->name);
	p->high=100;
	p->sex='m';
	printf("%s\n",p->name);


	free(p);
	p=NULL;


	return 0;
}

5.结构体数组

#include <stdio.h>
#include <string.h>
typedef struct{
	char name[100];
	int high;
	char sex;
}stu;

int main(int argc, const char *argv[])
{
	stu arr[3]={{"zhangsan",100,'m'},{"lisi",110,'m'}};
	for(int i=0;i<3;i++){
		printf("%s %d %c\n",(arr+i)->name,arr[i].high,arr[i].sex);
	}
	
	return 0;
}

6.内存分配

数据结构:动态内存分配+内存分区+宏+结构体,算法,数据结构,c#文章来源地址https://www.toymoban.com/news/detail-829322.html

到了这里,关于数据结构:动态内存分配+内存分区+宏+结构体的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive 分区表 (Partitioned Tables) 『 创建分区表 | CRUD分区 | 修复分区 | 数据导入(静态分区、动态分区) | 查询数据/表结构』

    条件:假如现有一个角色表 t_all_hero ,该表中有6个清洗干净的互不干扰的数据文件:射手、坦克、战士、法师、刺客、辅助 要求:查找出名字为射手且生命值大于6000的角色人数 惯性解决方法:按照MySQL思维很容易想到 问:如何提高效率?这样虽然能够解决问题,但是由于要

    2024年02月04日
    浏览(77)
  • 操作系统简单动态分区分配算法(c++)

    首次适应算法 首次适应算法找到一个可以分配的内存块就进行分配,下一次分配时还是从空闲分区链头开始找,该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区,这为以后到达的大作业分配大的内存空间创造了条件。 但是低址部分不断被

    2024年02月04日
    浏览(56)
  • 数据结构之动态内存管理机制

      目录 数据结构之动态内存管理机制 占用块和空闲块 系统的内存管理 可利用空间表 分配存储空间的方式 空间分配与回收过程产生的问题 边界标识法管理动态内存 分配算法 回收算法 伙伴系统管理动态内存 可利用空间表中结点构成 分配算法 回收算法 总结 无用单元收集(

    2024年02月12日
    浏览(41)
  • [C语言][数据结构][动态内存空间的开辟]顺序表的实现!

    目录 零.必备知识 a.顺序表的底层是数组. b.数组在内存中是连续存放的. c.动态内存空间的开辟(malloc,calloc,realloc). 一.顺序表的定义与实现          1.1 顺序表的定义          1.2 顺序表的初始化          1.3 顺序表的销毁          1.4 顺序表容量的检查与调整

    2024年04月09日
    浏览(88)
  • 编写C语言程序,模拟实现首次/最佳/最坏适应算法的内存块分配和回收,要求每次分配和回收后显示出空闲分区和已分配分区的情况。假设初始状态下,可用的内存空间为640KB。(江西师范大学软件学院 操作系统)

    为了实现动态分区分配,通常将系统中的空闲分区链接成一个链。所谓顺序查找是指依次搜索空闲分区链上的空闲分区,去寻找一个大小能满足要求的分区。 --------计算机操作系统(第四版) 可变分区也称动态分区,在指作业装入内存时,从可用的内存中划出一块连续的区域

    2024年02月08日
    浏览(44)
  • 操作系统动态内存分配算法【C语言实现】

    题目: 采用五个算法,各自作业在1024kB空间上分配情况。 内存可变分区分配仿真算法 :首次适应,下次适应,最佳适应,最坏适应和快速分配。 使用的结构体数组表示起始地址,内存块大小,内存块状态(0空闲,1占用) void bubbleprint(struct Info info[]) 函数是为了内存块大小

    2024年02月03日
    浏览(44)
  • 数据结构与算法-动态规划

    (我猜是做的多了背的题多了就自然懂了) 迭代法一般没有通用去重方式,因为已经相当于递归去重后了 这两个问题其实是一个问题,一般直接写出的没有去重的递归法,复杂度很高,此时需要使用备忘录去重,而备忘录去重时间复杂度和使用dp数组进行迭代求解时间复杂度相同

    2024年02月04日
    浏览(45)
  • 数据结构与算法之贪心&动态规划

            一:思考         1.某天早上公司领导找你解决一个问题,明天公司有N个同等级的会议需要使用同一个会议室,现在给你这个N个会议的开始和结束 时间,你怎么样安排才能使会议室最大利用?即安排最多场次的会议?电影的话 那肯定是最多加票价最高的,入场

    2024年02月09日
    浏览(47)
  • python算法与数据结构---动态规划

    记不住过去的人,注定要重蹈覆辙。 对于一个模型为n的问题,将其分解为k个规模较小的子问题(阶段),按顺序求解子问题,前一子问题的解,为后一子问题提供有用的信息。在求解任一子问题时,通过决策求得局部最优解,依次解决各子问题。最后通过简单的判断,得到

    2024年02月20日
    浏览(75)
  • 数据结构与算法 | 动态规划算法(Dynamic Programming)

    上一篇文末已经提到了记忆化搜索是动态规划(Dynamic Programming)的一种形式,是一种自顶向下(Top-Down)的思考方式,通常采用递归的编码形式;既然动态规划有自顶向下(Top-Down)的递归形式,自然想到对应的另外一种思考方式 自底向上( Bottom-Up ) ,也就是本篇要写的内

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包