《程序员面试宝典》--栈和堆,局部变量和全局变量

  • 在队列,栈,链表中都存在:顺序结构和链式结构
  • 栈:仅在表尾进行插入删除的线性表
  • 栈是向下生长的,所谓向下生长是指从内存高地址->低地址的路径延伸。使用函数先进行参数压栈,顺序从右向左。(P189)
  • 堆:由程序员分配和释放,如 malloc。栈:由编译器自动分配和释放。
  • 全局变量和静态全局变量,局部变量和静态局部变量
    1. 全局变量和静态全局变量:  都储存在静态存储区;声明在函数块之外;作用域有区别,全局变量在一个源文件声明之后,所有源文件都能使用,只是其他源文件需要加extern关键字,而静态全局变量的作用域只能在产生定义的源文件内,使用静态全局变量可以避免文件间的耦合。二者都有全局作用域,对所有函数可见。
    2. 局部变量和静态局部变量:局部变量在栈中分配空间,静态局部变量在静态存储区内分配空间。作用域都是函数执行期间,仅对声明该变量的函数内可见。
    3. 局部变量加上static,改变生命周期,从函数活动期间延长到整个程序运行期间。全局变量加上static改变了作用域,从所有源文件可见到仅声明的源文件可见。
  • 栈的POP 和 PUSH
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 typedef struct Node
     5 {
     6     int data;
     7     struct Node *next;
     8 }Node,*pNode;
     9 
    10 typedef struct Stack
    11 {
    12     int count;
    13     pNode top;//注意:非 pNode *top
    14 }LinkStack;
    15 
    16 int Push(LinkStack *S,int e)
    17 {
    18     pNode s = (pNode)malloc(sizeof(Node)); //结构分为Node和pNode的用处
    19     s->data = e;
    20     s->next = S->top;
    21     S->top = s;
    22     S->count++;
    23     return 0;
    24 }
    25 
    26 int Pop(LinkStack *S,int *e)
    27 {
    28     //注意:先判断栈是否为空
    29     pNode p;
    30     if(S->count == 0)
    31             return 0;
    32      *e = S->top->data;
    33     p = S->top;
    34     S->top=S->top->next;
    35     free(p);//pop必须要释放节点
    36     S->count--;
    37     return 0;
    38 }

     

转载于:https://www.cnblogs.com/richard-meng/p/4702298.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值