wordpress新闻模板,济南公司网站推广优化最大的,有没有房建设计的网站,装修设计图网站栈-弹夹
1、定义#xff1a;
栈就是特殊的线性表#xff0c;与之前的线性表的区别就是增加了约束#xff0c;只允许在一端插入和删除#xff0c;就这麽简单。
2、基本操作 栈的插入操作叫#xff1a;入栈{进栈、压栈}#xff1b;栈的删除#xff1a;出栈{退栈#x…栈-弹夹
1、定义
栈就是特殊的线性表与之前的线性表的区别就是增加了约束只允许在一端插入和删除就这麽简单。
2、基本操作 栈的插入操作叫入栈{进栈、压栈}栈的删除出栈{退栈弹栈} 课本要求 0、定义结构 //定义结构
#define Maxsize 100;//存储空间的初始分配量
typedef int Element;
typedef struct{int top;Element *date;int size
}StackList; //#define Maxsize 100
//typedef int Element;
//typedef struct{
// int top;
// Element date[Ma];
//}StackList; 1、初始化initstack作用是初始化一个空战 2、求栈长getlenS返回站的元素个数 3、取栈顶元素gettopSx通过x带回栈S的栈顶元素的值 4、入栈操作pushSx将x元素压入到站s中使x成为新的栈顶元素 5、出栈操作popSx将非空栈的栈顶元素删除 6、判栈空操作emptystackS为空返回1否则返回0. 7、输出栈操作showlistS以此输出栈S中的所有元素 3、理解
基本概念 1、栈顶指针top记录当前栈顶的位置下标或指针元素的个数站的长度 2、课本默认空栈递减栈顶指针初始化为0.【使用了0为栈空标记】可以理解为赋值再 3、所以满递增栈【使用-1作为栈空标志】可以理解为直接top再赋值 1、栈顶指针初始化为0或-1的区别
感谢我AI哥
栈顶指针初始化为0或-1的区别
栈顶指针是用来指示栈中当前顶部元素位置的变量。在不同的编程实践中栈顶指针的初始化值可以是0或-1这两种做法反映了不同的设计哲学和操作习惯。栈顶指针初始化为-1
设计哲学当栈顶指针初始化为-1时它表示栈是空的因为在数组中-1不是一个有效的索引值。这样当栈为空时栈顶指针指向的是一个非法的位置从而直观地表达了“没有元素在栈中”的状态。
操作习惯在压栈操作push operation中首先将栈顶指针加1然后将新元素放入栈顶指针所指向的位置。在出栈操作pop operation中首先取得栈顶元素的值然后将栈顶指针减1。这种做法在逻辑上类似于“先预留空位再放置元素”。栈顶指针初始化为0
设计哲学当栈顶指针初始化为0时它表示栈的底部因为在数组中0是第一个有效的索引值。这样当栈为空时栈顶指针正好位于栈底表示栈中没有元素。
操作习惯在压栈操作中首先将新元素放入栈顶指针所指向的位置然后栈顶指针加1。在出栈操作中首先将栈顶指针减1然后取得栈顶元素的值。这种做法在逻辑上类似于“先放置元素再移动指针”。何时使用哪种初始化方式
选择栈顶指针初始化为-1还是0取决于个人偏好和具体应用场景。如果设计者倾向于直观地表达“空栈”的概念并且喜欢在压栈前预留空位的操作方式可能会选择初始化为-1。相反如果设计者认为栈顶指针直接指向栈底更为直观并且喜欢在压栈时直接放置元素的操作方式可能会选择初始化为0。
2、realloc和malloc的区别 3、堆上提供长效空间栈上生命周期短临时使用 顺序栈固定大小 堆上维护接口 申请 释放Arraystack*stack 满递增栈 入栈 出栈 #includestdio.h
#includestdlib.h//定义结构
#define Maxsize 100//存储空间的初始分配量
typedef int Element;
typedef struct{int top;Element *date;int size;
}StackList;
//第二种方法
//#define Maxsize 100
//typedef int Element;
//typedef struct{
// int top;
// Element date[Ma];
//}StackList;
//都利用了数组 //初始化initstack作用是初始化一个空战
void initstack(StackList*stack){stack-date(Element*)malloc(sizeof(Element)*Maxsize);//这里给数据申请的空间 stack-top0;//2、课本默认空栈递减栈顶指针初始化为0.【0为栈空标记】stack-sizeMaxsize;}
//StackList*Createstack(StackList*stack) {
// stack(StackList*)malloc(sizeof(StackList)*Maxsize);
// for(int i0;iMaxsize;i){
// stack-date[i]0;
// }
// stack-top-1;
// return stack;
//}//2、求栈长getlenS返回站的元素个数
int getlen(StackList*list){return list-top;
}//3、取栈顶元素gettopSx通过x带回栈S的栈顶元素的值
int gettop(StackList*S,Element *x){//考虑栈空if(S-top0)return 0;*xS-date[S-top-1]; //为什么减一取原来已经有的元素 return 1;
}// 4、入栈操作pushSx将x元素压入到站s中使x成为新的栈顶元素
int push(StackList*stack,Element x){//考虑栈满 ,栈满扩容 if(stack-topMaxsize) {stack-date(Element*)realloc(stack-date,(Maxsize1)*sizeof(Element));//ralloc的用法 if(!stack-date)return 0;//考虑空间分配不成功返回0 stack-size;} stack- date[stack-top]x;return 1;
}
// 5、出栈操作popSx将非空栈的栈顶元素删除,存入指针e所指向的内存单元
int pop(StackList*stack,Element*x){//if(stack-top0)return 0;*xstack-date[--stack-top];return 1;
}//6、判栈空操作emptystackS为空返回1否则返回0.
int emptystack(StackList*stack){if(stack-top0)return 1;return 0;
}
//7、输出栈操作showlistS以此输出栈S中的所有元素
void showLlist(StackList*stack){while(stack-top!0){printf(%d,stack-date[--stack-top]);}
} 链式栈