我的代码有什么问题?

时间:2011-04-05 11:38:51

标签: c stack linked-list

最近我一直在制作我的堆叠项目,但是我的推送节点的代码有问题:

void push(struct stackNode *Stackptr , int data)
{
     struct stackNode *conductor;

     conductor = malloc(sizeof(struct stackNode));
     if(conductor !=NULL)
     {
                conductor->data=data;
                conductor->nxt=*Stackptr;
                Stackptr = conductor ;
                  }     
     else{
         printf("Wrong insertion"); 
          }

     }

但它不会编译。如果你想在这里看到我的其余代码,那就是:

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

struct stackNode
{
       int data;
       struct stackNode *nxt;
       };

struct stackNode *Stack;


void instructions()
{
     printf("        Please Select a Number to do the following\n\n");
     printf("              [1]Push a value\n");
     printf("              [2]Pop a value\n");
     printf("              [2]Peek a node\n");
     printf("              [3]Display\n");
     printf("              [4]Exit\n               ");
     }

     int main ()
     {
         int value; 
         int choice;
         Stack = NULL;

         instructions();

     do
     {
       scanf("%d",&choice);
         system("cls");


         if(choice == 1)
             {
                 printf("Enter your Desired Digit: ");

                                       }

              if(choice == 2)
              {
                        printf(" "); 
                        }       
              if(choice == 3)
              {

                        printf(" ");
                        }
                if(choice == 4 )
                {

                          printf("bye!");
                          return 0;
                          }      



         }while(choice !=4);

         getch();
         }

    void push(struct stackNode *Stackptr , int data)
    {
         struct stackNode *conductor;

         conductor = malloc(sizeof(struct stackNode));
         if(conductor !=NULL)
         {
                    conductor->data=data;
                    conductor->nxt=*Stackptr;
                    Stackptr = conductor ;
                      }     
         else{
             printf("Wrong insertion"); 
              }

         }

5 个答案:

答案 0 :(得分:2)

在push函数中,您正在分配stacknode,而不是指向stacknode的指针。

这是错误:

test.c:76:31: error: incompatible types when assigning to type ‘struct stackNode *’ from type ‘struct stackNode’

删除*指定指针,这就是你想要的。

这样可行:

conductor->nxt=Stackptr;

但是,该计划还存在其他问题。

答案 1 :(得分:1)

我将尽快找出错误; 快速编译,错误是;

74: error: incompatible types when assigning to type ‘struct stackNode *’ from type ‘struct stackNode’

是的,现在我知道要看看第74行。 第74行是;

  conductor->nxt=*Stackptr;

甚至无需考虑问题,甚至无需了解指针(您需要这些,但这只是一个快速调试) 所以我们删除*并将其更改为;

  conductor->nxt=Stackptr;

这就是一个问题。 但是在这段代码中还有很多其他的。确保经常调试和测试,并解释错误。如果所有其他方法都失败了,请确保在此处发布错误信息。

答案 2 :(得分:0)

由于您要更改Stackptr方法中的push,因此您需要通过<{p>}向push的来电者显示此更改

  • 返回已更改的Stackptr
  • 传递Stackptr
  • 的地址

答案 3 :(得分:0)

此:

conductor->nxt=*Stackptr;

看起来不对。 nxt字段应该是一个指针,但是你要取消引用,所以你试图填充整个节点。

代码还有许多其他问题,但这是我看到的第一个明显的编译时错误。

答案 4 :(得分:0)

使用typedef

会更容易
typedef struct _stacknode
{
    int data;
    struct _stacknode *nxt;
} StackNode;

StackNode *Stack;

此外,由于您似乎正在学习“C”,请检查一些完成的堆栈实现。这是编程书籍或在线教程的一个常见例子。在github中可能有很多。研究它,然后尝试自己的。