2022.9.19实训笔记

110 阅读1分钟

双链表指定位置插入

image.png

栈是一种特殊的线性表,特点是后进先出,最先加入的元素最后取出,最后加入的元素最先取出。

栈的常见操作包括判断栈是否为空和获得栈内元素个数,以及对元素的操作。对元素的操作都位于栈顶,包括以下三种操作:

添加元素:将元素加入栈顶,该操作称为入栈;

删除元素:将栈顶元素删除,该操作称为出栈;

查看元素:获得栈顶元素,不删除元素。

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));
    }