双链表指定位置插入
栈
栈是一种特殊的线性表,特点是后进先出,最先加入的元素最后取出,最后加入的元素最先取出。
栈的常见操作包括判断栈是否为空和获得栈内元素个数,以及对元素的操作。对元素的操作都位于栈顶,包括以下三种操作:
添加元素:将元素加入栈顶,该操作称为入栈;
删除元素:将栈顶元素删除,该操作称为出栈;
查看元素:获得栈顶元素,不删除元素。
typedef stuct{
int data[Maxsize];
int size;
}Stack;
int push(Stack & sp,int data){
if(sp->size == Maxsize){
cout<<"the stack is overflow"<<endl;
return -1;
}
sp->data[size++] = data;
}
int pop(Stack & sp){
if(sp->size == 0){
cout<<"the stack is empty"<<endl;
return -1;
}
sp->size--;
return sp->data[size];
}
栈的应用
进制转换
//二进制转十进制
char str;
cin>>str;
for(i=0;i<strlen(str);i++){
Push(&s,str[i]);
}
for(i=0;!StackEmpty(&s);i++){
outcome += (int)(Pop(&s)-48)*pow(2,i); //字符转int
}
//二进制转八进制
char str;
cin>>str;
for(i=0;i<strlen(str);i++){
Push(&s,str[i]);
}
while(!StackEmpty(&s))
{
temp=0; //每次循环执行时temp置0
for(i=0;i<3&&!StackEmpty(&s);i++) //当读取三位binary或者binary栈为空时跳出
temp += (int)(Pop(&s)-48)*pow(2,i);
Push(&t,(char)(temp+48)); //转换后的8进制数压入8进制栈
}
//输出8进制栈
printf("converse:");
while(!StackEmpty(&t))
{
printf("%c",Pop(&t));
}
}
//二进制转十六进制
char str;
cin>>str;
for(i=0;i<strlen(str);i++){
Push(&s,str[i]);
}
while(!StackEmpty(&s))
{
temp=0; //每次循环执行时temp置0
for(i=0;i<4&&!StackEmpty(&s);i++) //当读取三位binary或者binary栈为空时跳出
temp += Pop(&s)*pow(2,i);
if(temp<=9)
Push(&t,(int)(temp+48)); //转换后的8进制数压入8进制栈
else
{
switch(temp)
{
case 10:Push(&t,'A');break;
case 11:Push(&t,'B');break;
case 12:Push(&t,'C');break;
case 13:Push(&t,'D');break;
case 14:Push(&t,'E');break;
case 15:Push(&t,'F');break;
}
}
}
//输出16进制栈
printf("converse:");
while(!StackEmpty(&t))
{
printf("%c",Pop(&t));
}