- 在队列,栈,链表中都存在:顺序结构和链式结构
- 栈:仅在表尾进行插入删除的线性表
- 栈是向下生长的,所谓向下生长是指从内存高地址->低地址的路径延伸。使用函数先进行参数压栈,顺序从右向左。(P189)
- 堆:由程序员分配和释放,如 malloc。栈:由编译器自动分配和释放。
- 全局变量和静态全局变量,局部变量和静态局部变量
- 全局变量和静态全局变量: 都储存在静态存储区;声明在函数块之外;作用域有区别,全局变量在一个源文件声明之后,所有源文件都能使用,只是其他源文件需要加extern关键字,而静态全局变量的作用域只能在产生定义的源文件内,使用静态全局变量可以避免文件间的耦合。二者都有全局作用域,对所有函数可见。
- 局部变量和静态局部变量:局部变量在栈中分配空间,静态局部变量在静态存储区内分配空间。作用域都是函数执行期间,仅对声明该变量的函数内可见。
- 局部变量加上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