Linux C++:栈、队列、链表

    在学习数据结构中,栈、队列、链表是几个比较重要的学习点。如何让数据有序的存储呢,但是在这之前那我们得先学习一些储备知识,那样才会让我们更好的往下学习。

程序内存分配(基础知识)

  1. 栈(stack): 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 其操作如往箱子里面放衣服一样,只有一个出口,后进先出。
  2. 堆(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。其操作方式如同有出口和入口的景区,先进先出。
  3. 自由存储区:自由存储是C++中通过new与delete动态分配和释放对象的抽象概念,而堆(heap)是C语言和操作系统的术语,是操作系统维护的一块动态分配内存。(这里有点难理解,很多人认为自由存储区和堆是等价的,其实不然)
  4. 全局存储区(静态存储区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。
  5. 常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。

示例描述:

//test.cpp
int a = 0; //全局初始化区
int a = 0; //全局初始化区
char *p1; //全局未初始化区
main() {
    int b; //栈
    char s[] = "abc"; //栈
    char *p2; //栈
    char *p3 = "123456"; //123456\0在常量区,p3在栈上。
    static int c = 0; //全局(静态)初始化区
    int* nub = new int;
    int* nub1 = new int(5);
    //分配在自由存储区  new
    p1 = (char *)malloc(10);
    p2 = (char *)malloc(20);
    //分配得来得10和20字节的区域就在堆区。
    strcpy(p1, "123456"); //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
    free(p1); //释放内存
    free(p2);
    delete nub;  //释放内存
    delete[] nub1;
}

数据结构:栈

栈:是一种连续存储的数据结构,特点是存储的数据先进后出。我们把表尾称作栈顶(top),相应的,表头称作栈底(bottom),由栈的特性可知,栈是一种后进先出(LIFO)的线性表,只能在栈顶进行插入和删除。包括:栈、链栈。

使用STL容器基于数组的栈操作:

#include <stack>
#include <iostream>

using namespace std;
 
int main()
{
	stack<int> Nstack;
	int sum = 0;

	for (int i = 0; i <= 10; i+&
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值