当前位置:   article > 正文

【数据结构】头歌实践教学平台·顺序栈_头歌实践平台实现顺序栈的入栈、出栈和取栈顶功能。

头歌实践平台实现顺序栈的入栈、出栈和取栈顶功能。

文章目录
题目练习
1.顺序栈入栈、出栈操作
要求
代码
2.进制转换(10进制转换为r进制)
要求
代码
3.括号匹配
要求
代码
4.回文判断
要求
代码
5.
要求
代码
题目练习
1.顺序栈入栈、出栈操作
要求
编写顺序栈的入栈、出栈的操作函数。

代码


Status Push(SqStack &S, SElemType e){
// 若栈非空,将元素e入栈,函数返回OK,否则返回ERROR
/********** Begin **********/
if (S.top - S.base == S.stacksize) return ERROR;
*S.top++ = e;
return OK;
/********** End **********/

Status Pop(SqStack &S,SElemType &e){
//如果栈为空,出栈失败,函数返回ERROR,否则删除栈顶元素通过e,函数返回OK
//条件: 
/********** Begin **********/ 
if (S.top == S.base) return ERROR;
e = *--S.top;
return OK;
/********** End ************/

2.进制转换(10进制转换为r进制)
要求
利用栈基本操作,编写一个能将一个10进制转换成r进制(2、8、16)的函数。

代码
Status Convert(SqStack &S,int N,int r){
//十进制N转换成r(2、8、16)进制,十六进制以大写字母形式输出 


/********** Begin **********/ 
InitStack(S);
while (N) {
    Push(S, N % r);
    N = N / r;
}
int e;
while (!StackEmpty(S)) {
    Pop(S, e);
    if (e < 10) printf("%d", e);
    else printf("%c", 'A' + e - 10);
}
/********** End **********/
}     


3.括号匹配
要求
编写一个能调用栈基本操作实现括号匹配的函数。

代码
Status Compare(SqStack &S,char Str[]){
/*括号匹配(考虑三类括号:'([{'),对输入的括号字符串Str[]进行检测*/
 /********** Begin **********/ 
 InitStack(S);
 int i = 0;
 SElemType e;
 bool flag = true;
 while (Str[i] != '\0' && flag) {
     switch(Str[i]) {
         case '(':
         //Push(S, Str[i]); break;
         case '[':
         //Push(S, Str[i]); break;
         case '{':
            Push(S, Str[i]); 
            break;

         case ')':
            if(Pop(S, e) == ERROR || e != '(') 
                flag = false;
            break;
         
         case ']':
            if(Pop(S, e) == ERROR || e != '[') 
                flag = false;
            break;
         
         case '}':
            if(Pop(S, e) == ERROR || e != '{') 
                flag = false;
            break;
     }
     i++;
 }
if (flag && StackEmpty(S)) return true;
return false;
 /********** End **********/ 


4.回文判断
要求
编写一个能调用栈基本操作实现回文判断的函数。

代码
Status Judge(SqStack &S,char str[]){
/*回文判断,对输入的字符串Str[]进行检测*/
 /********** Begin **********/ 
 InitStack(S);
 int i = 0;
 SElemType e;
 int flag = 1;
 int n = strlen(str) / 2;
 for (i = 0; i < n; i++) {
     Push(S, str[i]);
 }
 if (strlen(str) % 2 != 0) {
     i++;
 }
 while (str[i] != '\0' && flag) {
     Pop(S, e);
     if (e != str[i]) flag = 0;
     i++;
 }
 if (flag) return OK;
 return ERROR;
    /********** End **********/      
}    


5.
要求
输入一个整数序列a1,a2,a3…,an。当ai不等于-1时将ai进栈;当ai=-1时,输出栈顶元素并将其出栈。

代码
void InOutS(SqStack &S,SElemType a[],int n)
{//实现一组整数序列a[]的出入栈,当a[i]为-1时出栈,其余入栈
 /********** Begin **********/  
 int i;
 SElemType e;
 for (i = 0; i < n; i++) {
     if (a[i] != -1) Push(S, a[i]);
     else {
         if (Pop(S, e)) {
             cout << e << endl;
         }
         else {
             cout << "POP ERROR" << endl;
             return;
         }
     }
 }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/518608
推荐阅读
相关标签
  

闽ICP备14008679号