使用LinkedList将数据推入堆栈

时间:2016-08-17 08:39:16

标签: c linked-list stack

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>

struct nodeStack{
    char operator;
    struct  nodeStack *next;

};

typedef struct nodeStack node;

node *start=NULL;
node *tail=NULL;
int top=-1;


int isEmpty()
{

    if(top==-1)
        return 1;

}



void push(char c){
    node *tempNode,*tail;

    tempNode=(node*) malloc(sizeof(node));
    if(tempNode==NULL){
        printf("Memory Unvailable\n");
        return;
    }

    tempNode->operator=c;
    if(start==NULL){
        start=tempNode;
        tail=start;
        tempNode->next=NULL;
        top++;
    }
    else{
        tail->next=tempNode;
        tempNode->next=NULL;
        tail=tail->next;
        top++;
    }

}


/*
struct node* pop(){
    if(top==-1){
        printf("stack is empty");
        return;
    }

    else
    {
        node *temp;
        temp=start;
        while(temp->next!=tail){
            temp->next=NULL;
            free(tail);
            tail=temp;
        }
    }

}*/


void displayStack(){
    node *i;
    for(i=start;i!=tail;i=i->next){
        printf("%c -> ",i->operator);
    }
}


int main(){
    int i;
    int flag=1;
    char choice='y';
    printf("pushing data into the stack......");

   while(flag==1){
        char ch;
        printf("enter a character\n");
        scanf(" %c",&ch);
        push(ch);
        printf("want to push more operator (y\n)");
        scanf(" %c",choice);
        if(choice=='y')
            flag=1;
        else
            flag=0;

   }

    displayStack();

   return 0; 
}

当我尝试运行它时,它给我分段错误。 它只接受一个输入而不进一步,同时它给出了分段错误

当我尝试运行它时,它给我分段错误。 它只接受一个输入而不进一步,同时它给出了分段错误

2 个答案:

答案 0 :(得分:0)

看看:

scanf(" %c",choice);

第二个参数应作为地址传递,因为scanf会修改它。

尝试修改:

scanf("%c", &choice);

我不打算详细解释原因,因为我认为你犯了一个错误,因为在之前的一些行中scanf(" %c",&ch);你调用了正确的。

注意:我会避免使用scanf字符串格式的空格。

答案 1 :(得分:0)

这是一个有点修改过的代码!工作代码!

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct nodeStack{
    char op;
    struct  nodeStack *next;
}node;


node *start = NULL;
node *tail = NULL;
int top=-1;


int isEmpty()
{

    if(top==-1)
       return 1;
    else return 0;

}



void push(char c){
    node *tempNode;

    tempNode=(node*) malloc(sizeof(node));

    tempNode->op=c;
    if(start==NULL){
        //start = (node*) malloc(sizeof(node));
        start=tempNode;
        tail=start;
        tempNode->next=NULL;
        top++;
    }
   else{
        tail->next=tempNode;
        tempNode->next=NULL;
        tail=tail->next;
        top++;
    }

}


/*
 struct node* pop(){
   if(top==-1){
       printf("stack is empty");
        return;
   }

  else
   {
        node *temp;
       temp=start;
       while(temp->next!=tail){
          temp->next=NULL;
          free(tail);
          tail=temp;
      }
  }

 }*/


void displayStack(){
    node *i;
    for(i=start;i!=NULL;i=i->next){
        printf("%c -> ",i->op);
    }
}


int main(){
    int i;
    int flag=1;
    char choice='y', ch;
    printf("pushing data into the stack......");
    start=NULL; tail=NULL;
    while(flag){
        printf("enter a character\n");
        scanf(" %c",&ch);
        push(ch);
        printf("want to push more operator (y/n)");
        scanf(" %c",&choice);
        if(choice=='y')
            flag=1;
        else
            flag=0;

       }

    displayStack();

  return 0; 
}