动态分配内存和链表
来源:互联网 发布:撒谎眼睛往哪看 知乎 编辑:程序博客网 时间:2024/06/07 01:29
C/C++学习笔记之八
上一节我们讲到了结构体,结构体是一个非常重要的内容,特别对于本节内容而言是一个非常重要的基础知识。本节主要讲动态内存的分配与链表的处理,下面将对其进行具体介绍。
1.动态内存分配(malloc/free)
原因:数组的长度定死了,无法改变,这才引入了动态内存的分配
例:
struct Student{
int id;//学号
char name[10];//姓名
int score[5];//成绩
};
定义100个学生;
Student stu[100];//数组方式,无法动态定义
int size=100*sizeof(Student);
Student *stu=(Student *)malloc(sizeo);//开辟一百个空间的内存单元
........
free(stu);//释放内存空间
上面的例子中,我们使用动态内存内存可以自己定义分配最大内存。
malloc:内存申请地址,需主动归还(free)。
注意:1)只有指针类型为malloc时,才可以用free;
2)及时free,否则累计到一定的时候会消耗资源。
3)free后该指针不能再使用。
2.链表
链表就是将所有的节点串起来,组成一个表,这些节点并不必须是连在一起的。
例:
struct Student{
int id;//学号
char name[10];//姓名
int score[5];//成绩
Student *next;
};
Student stu[5];
stu[0].next=&stu[1];
stu[1].next=&stu[2];
..........
stu[4].next=null(0);
Student *p=stu;
//指向了表头,可以通过指针来访问。
有头链表的构造:
Student m_head={0};
链表中的对象一般是动态创建
Student *s1=(Studnet *)malloc(sizeof(Student));
m_head.next=s1;
s1->next=NULL;
链表节点的插入:
(1)头插法(带头结点):
s->next=m_head.next;
m_head.next=s;//s为将插入的节点
(2)尾插法(带头结点)
Student *p=m_head.next;
Student *pre=&m_head;
while(1){
if(!p){
break;
}
pre=p;
p=p->next;
}
pre->next=s;
s->next=p;
此外,还有按条件插入,与上述方法类似,这里就不加详述;
0 0
- 动态分配内存和链表
- 链表动态分配内存
- 顺序表(动态分配内存
- 动态分配内存malloc和calloc
- C++内存动态分配和引用
- C和C++动态分配内存
- 静态分配内存和动态分配内存
- 静态分配内存和动态分配内存
- 顺序表(动态分配内存)
- C++指针和数组和动态分配内存
- 动态分配内存
- 动态分配内存
- 内存动态分配
- 动态分配内存
- 动态分配内存
- 动态分配内存
- 动态分配内存
- 动态分配内存
- Spring mvc 配置详解
- poj 1743 Musical Theme 【后缀数组 最长不重叠重复子串】
- HYSBZ 3196Tyvj 1730 二逼平衡树(树套树)
- poj_2503(map映射)
- HTML音频
- 动态分配内存和链表
- javaEE
- 最长上升子序列
- Scala之模式匹配(Patterns Matching)
- UVa 12096 - The SetStack Computer
- 最长公共子序列 LCS(模板) poj 1458
- javabean总结
- HTML视频
- Java并发编程系列之十三:生产者-消费者模式