使用链接列表创建堆栈时出错

时间:2014-02-15 09:49:07

标签: c data-structures linked-list stack

我正在使用链表创建堆栈(我只在推送部分)。我已将我的结构声明为

struct LinkedStack {
    int data;
    struct LinkedStack* next;
};

我有3个指向全局声明的LinkedStack的指针。

struct LinkedStack *first = NULL;
struct LinkedStack *previous = NULL;
struct LinkedStack *current = NULL;

main()我写了这个

int data = 0, choice = 0;
if(current == NULL) {
     printf("\nNo Memory Allocated");
}

printf("\n1. Push Data");
printf("\n2. Pop Data");
printf("\n3. Display The Stack");
printf("\n4. Exit");

scanf("%d", &choice);

switch(choice) {
    case 1:
        printf("Enter the data:: ");
        scanf("%d", &data);
        push(&current, data);
        break;
}

我写的推送功能就是这个 -

void push(struct LinkedStruct **s, int usrdata) {
    if(first == NULL) {
        first = *s;
    }  
    if(previous != NULL) {
        previous->next = *s;
    } 

    *s->data = usrdata;
    previous = *s;
    *s->next = NULL;
}

但这会导致编译失败。错误是 -

  

请求成员'数据'在非结构或   工会
  请求成员'下一个'的东西不是结构或   联合

这些错误的行号是这些行:

  *s->data = usrdata;
  previous = *s;
  *s->next = NULL;

你能告诉我为什么会这样吗?

2 个答案:

答案 0 :(得分:4)

“箭头”运算符比解除引用运算符高precedence。所以从编译器的角度来看,你已经写过了。

*(s->data)=usrdata;

您需要使用括号:

(*s)->data=usrdata;

答案 1 :(得分:-1)

您应该使用s->data = usrdata(*s).data = usrdata