栈
1.特殊线性表,所以也分为顺序存储和链式存储结构
2.表尾称为栈尾,表头称为栈底
3.元素必须后进先出;所有操作只能在表尾进行
4.插入操作叫做进栈/入栈/压栈,删除操作叫出栈/弹栈
5.最开始栈中不含有任何数据,叫空栈,此时栈顶就是栈底,
然后数据从栈顶进入,栈顶栈底分离,整个栈的当前容量变大,
数据出栈时从栈顶弹出,栈顶下移,整个栈的当前容量变小1
2
3
4
5
6
7栈的顺序存储结构
typedef struct
{
ElemType *base; ##指向栈底的指针变量
ElemType *top; ##指向栈顶的指针变量
int stackSize; ##栈当前可使用的最大容量
}sqStack;
入栈操作
每次向栈中压入一个数据,top指针+1,直到栈满为止
出栈操作
在栈顶取数,栈顶指针随之下移,当前容量-1,
JS数组push和pop方法对数组处理
二进制转10进制
主要思想,每次pop数组最后一项,即二进制的位数依次增长,顺序i正好为指数1
2
3
4
5
6
7
8var list = [1,1,0,1,0,1,0,1];
var sum = 0;
var length = list.length;
for(var i = 0;i<length;i++){
var pop = list.pop();
sum+= pop*Math.pow(2,i);
}
console.log(sum);
二进制转8进制
主要思想,三位一组生成10进制,最后十进制按位数相加1
2
3
4
5
6
7
8
9
10
11
12
13var list = [1,1,0,1,0,1,0,1];
var hex = 0;
var length = list.length;
for(var i=0;i<length/3+1;i++){
var sum = 0;
for(var j = 0;j<3;j++){
if(list.length>0){
sum+=list.pop()*Math.pow(2,j);
}
}
hex +=sum*Math.pow(10,i);
}
console.log(hex);
二进制转16进制
注意 >9时,转换成字母,pop,进行反序链接1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24var list = [1,1,0,1,0,1,0,1];
var hex = [];
var length = list.length;
for(var i=0;i<length/4+1;i++){
var sum = 0;
if(list.length>0){
for(var j = 0;j<4;j++){
if(list.length>0){
sum+=list.pop()*Math.pow(2,j);
}
}
if (sum >-1&&sum<10) {
hex.push(String.fromCharCode(sum+48));
}
if(sum >9 && sum <16){
hex.push(String.fromCharCode(sum+55));
}
}
}
var str = "";
for(var l = hex.length-1;l>-1;l--){
str+=hex[l];
}
console.log(str);