当前位置:   article > 正文

【数据结构】头歌实践教学平台·顺序栈_头哥实践教学平台顺序结构演示

头哥实践教学平台顺序结构演示

题目练习

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 **********/
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
Status Pop(SqStack &S,SElemType &e){
//如果栈为空,出栈失败,函数返回ERROR,否则删除栈顶元素通过e,函数返回OK
//条件: 
/********** Begin **********/ 
if (S.top == S.base) return ERROR;
e = *--S.top;
return OK;
/********** End ************/
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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 **********/
} 	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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 **********/ 
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

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 **********/ 	 
}	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

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;
         }
     }
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/458936
推荐阅读
相关标签
  

闽ICP备14008679号