【问题标题】:Linked List Push Function链表推送功能
【发布时间】:2011-04-07 10:04:24
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

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


void instructions()
{
    printf("[1]Push a value on the stack\n");
    printf("[2]Pop a value off the stack\n");
    printf("[3]Display the whole stack\n");
    printf("[4]Exit");
} 

void push(struct stackPtr *topPtr, int info)
{
    struct stackPtr *newPtr;
    newPtr= malloc(sizeof(struct stackNode));
    if(newPtr !=NULL)
    {
        newPtr->data = info;
        newPtr->nextPtr=*topPtr;
        *topPtr=newPtr;
    }
    else
    {
        printf("%d not inserted no memory available");
    }

int main()
{
    struct StackNodePtr *stackPtr;
    stackPtr = NULL;
    int choice, value;
    do
    {   
        instructions();
        printf("\nEnter Your Choice: ");
        scanf("%d",&choice);
        if(choice == 1)
        {
            printf("Enter  a value for the stack");     
        }             
        if(choice == 2)
        {
            printf(" "); 
        }       
        if(choice == 3)
        {
            printf(" ");
        }
        if(choice == 4 )
        {
            printf("bye!");
            return 0;
        }
    } while(choice !=4);
    system("pause");
}

我为我的链表和堆栈代码创建了一个函数推送,但问题是它不起作用,函数推送中有巨大错误它有什么问题?它不允许使用 malloc 为什么呢?

【问题讨论】:

  • 天啊,这就像第六个问题,几乎是同一件事......你真的在那个名单上苦苦挣扎,不是吗?
  • typedef and linked list 的可能重复项

标签: c list stack push


【解决方案1】:

这对你有用吗?

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

int main() { struct stackNode * stackPtr = NULL; }

【讨论】:

  • 这个和这个一样吗??结构栈节点 *stackPtr; stackPtr = NULL;??
  • 是的,但我更喜欢答案中的风格,因为我喜欢明确地初始化我的定义。
【解决方案2】:
struct stackNode
{
   int data;
   struct stackNode *nextPtr;
};

int main()
{
    struct stackNode *stackPtr = NULL;
}

【讨论】:

  • 您正在创建一个全局变量。
【解决方案3】:
// just precede the struct type with ... struct
struct stackNode* stackPtr = NULL;

编码愉快。

【讨论】:

  • 这个怎么样?任何人都可以转录这个吗? typedef struct stackNode StackNode; typedef struct StackNode *StackNodePtr;
  • 把它们拿出来?如果它们没有被使用,它们就没有被使用。
【解决方案4】:

这一行:

typedef struct StackNode *StackNodePtr;

顺便说一句是错的。你的 typedef 应该是:

typedef struct stackNode StackNode;
typedef StackNode* StackNodePtr;

不知道您为什么反对使用 typedef - 它往往会使代码更具可读性。

【讨论】:

  • 我只是想保持简单,这让我很困惑 ooppp 抱歉,我该如何解决这个问题?? typedef struct stackNode StackNode; typedef StackNode* StackNodePtr;没有任何类型定义?
  • @Kyel:我认为来自@John Källén、@pst 和 @0verbose 的其他答案已经向您展示了如何在没有 typedef 的情况下编写代码 - 如果这不是您想要的,那么您需要改写你的问题。
  • soo 总结一下,就是这样??
猜你喜欢
  • 2017-05-09
  • 2021-09-18
  • 1970-01-01
  • 2014-12-19
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多