C top和pop中的数据结构

问题描述

如何填写我的 if-else 声明,如果这是字母,则将其弹出,如果没有,请将该字母放在顶部。我用struct解决问题。

typedef struct StackStruct{
 int*    darr;  
 int     size;  
 int     inUse; 
} Stack;

void push (Stack* s,int val){
  if (s->inUse >= s->size){
    s->size = s->size + 2;

    int *temp = ((int*)malloc (sizeof(int)* s->size));
    for(int i = 0; i < s->size; i++){
      temp[i] = s->darr[i];
    }
    free(s->darr);
    s->darr=temp;

   }

  s->darr[s->inUse] = val;
  s->inUse = s->inUse + 1;
}

int isEmpty (Stack* s){
  if ( s->inUse == 0)
    return TRUE;
  else
    return FALSE;
}


int top (Stack* s){
  return (  s->darr[s->inUse-1] );
}

void init (Stack* s){
 s->size = 2;
 s->darr = (int*) malloc ( sizeof (int) * s->size );
 s->inUse  = 0;
}


Stack pop (Stack s){
  s.inUse -= 1;
  return s;
}

在我的 if-else 语句中,我注释掉的内容在我的代码中不起作用

int main(int argc,char const *argv[]){
   Stack st1;

    init (&st1);


    char input[300];
  
    if('a' || 'b' || 'c' || 'd'){
    //push to stack
    //push(st1,20);
  }

if( 'm' || 'n' || 'o' || 'p'){
  //check the top of the stack 
   int a;
   a = top(&st1);
   printf("this is top %d",a);

}
return 0;
}

解决方法

假设您有一个输入语句,例如

printf( "Give me a letter: " );
scanf( "%s",input );

并且您使用input[0]作为输入字母,那么您可以使用strchr中声明的string.h库函数并执行以下操作:

if ( strchr( "abcd",input[0] ) )
{
  push( st1,input[0] );
}
else if ( strchr( "mnop",input[0] ) )
{
  // get top
}
else
{
  // input not in abcd or mnop,do something else
}

strchr在字符串参数中搜索指定的字符;如果找到了字符,则返回字符串中字符的地址,否则返回NULL