c - 使用指针实现堆栈

标签 c pointers data-structures structure

我正在尝试使用指针和结构来实现 Stacks 的推送和弹出操作。这段代码在第 40 行 (s->entry=(StackEntry *)malloc(sizeof(StackEntry)*(n+1));) 给我错误,说段错误。请帮忙

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    typedef long int StackEntry ;
    typedef int Boolean;

typedef struct stack{
    int top;
    int size;
    StackEntry *entry; //pointer to dynamic array
}Stack;
Boolean StackEmpty(Stack *s)
{
    return s->top<=0;
}
Boolean StackFull(Stack *s)
{
    return s->top >= s->size;
}
void Error(char *msg)
{
    puts(msg);
}
int StackSize(Stack *s)
{
    return s->top ;
}
void StackTop(StackEntry *item,Stack *s)
{
    *item=s->entry[s->top];
}
void CreateStack(Stack *s,int n)
{
    s->top=0;
    s->size=n;
    s->entry=(StackEntry *)malloc(sizeof(StackEntry)*(n+1)); 
}
void Push(StackEntry item,Stack *s)
{
    if(StackFull(s))
        Error("Stack is full");
    else s->entry[s->top++]=item;
}
int main() {

    int n;
    scanf("%d",&n);
    Stack *s;
    CreateStack(s,n);
    Push(10,s);
    //Push(15,s);
    return 0;
}

最佳答案

尝试像这样更改您的 main() 函数:

int main() {                            
    int n;            
    scanf("%d",&n);   
    Stack s;          
    CreateStack(&s,n);
    Push(10,&s);      
    //Push(15,s);     
    return 0;         
}

正如 BLUEPIXY 所指出的,Stack *s 声明了一个指向 Stack 结构的指针,而您想要的是一个新的结构本身。如果您需要 main() 范围之外的结构,您还可以声明 Stack 指针,然后为其分配内存。

关于c - 使用指针实现堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45643400/

相关文章:

c - 使用指针作为输入从自定义函数中手动拆分 C 中的字符串

c++ - 这两个类型测试对象动态数组声明之间的区别?

c - 数组的指针算术

java - 相同的 IF 条件不适用于不同的值

c - 我的简单 for 循环不起作用,我不知道为什么

c - 我的 strchr 版本有什么问题?

java - 包移除()方法

user-interface - 网页上的层次结构表示

c - c 语法问题 - const * const * 定义

c - 用C语言编写没有指针的合并排序