為什麼函式在 C(鏈堆疊)中不起作用。

發布 科技 2024-06-14
12個回答
  1. 匿名使用者2024-01-29

    因為 c 是值傳遞,推送後,如果 stack==null,推送時堆疊的位址無法帶回,所以返回後堆疊仍然是 null,可以這樣修改:

    1,plinkstack push(plinkstack stack, int x)

    2,stack = push(stack,10);

    但是當有資料時,以及推送時要注意第乙個指標。

    另外,我想你對 Creat Linkstack 也有問題,劃分空間後,如果不是空的,把指標留空,那麼劃分這個空間的目的是什麼?

  2. 匿名使用者2024-01-28

    在程式中使用 malloc 存在一些問題,很多時候您不使用 malloc 而只是定義指標。

    creat linkstack() 存在問題。 既然已經是 malloc 空間了,為什麼 stack=null。 那麼 malloc 的空間將是無效的。

    elsepnode p=(pnode)malloc(sizeof(struct node));

    p=stack;

    pnode newpnode=(pnode)malloc(sizeof(struct node));

    newpnode->info=x;

    newpnode->link=p;

    stack=newpnode;

    這部分有問題。 由於堆疊是非 null 的,因此無需為堆疊提供 malloc 空間。

  3. 匿名使用者2024-01-27

    push(stack,10);

    此行上的堆疊指標尚未修改。

    正確的用法是將函式的這一端宣告為指標:push(plinkstack* stack);

    呼叫方使用 push(&stack,10);

  4. 匿名使用者2024-01-26

    這兩個函式之一用於銷毀堆疊,另乙個是清空堆疊 clearstack

    銷毀是釋放整個堆疊,而清空只是從堆疊中刪除元素。

    由於您的堆疊元素是 int 基本變數,因此堆疊元素的內容直接儲存在堆疊空間中,並且沒有額外的應用程式來儲存堆疊元素,因此在從堆疊中刪除堆疊元素時無需呼叫 free 函式。

    實際上,您的 DestroyStack 可以非常簡單,如下所示:

    int destroystack(stack &s) 至於clearstack,書上寫的沒問題,清空堆疊,不是為了釋放堆疊空間,而是清除堆疊中的元素,最直接的方法是將頂部指標指向堆疊底部,當堆疊頂部和堆疊底部的指標相同時, 這意味著堆疊中沒有元素,堆疊空間仍然保留,下次可以繼續按堆疊元素並反彈堆疊。

  5. 匿名使用者2024-01-25

    沒有必要一一做。 不要狹隘地看待“清空”的概念,其實只要將頂部指標指向堆疊的底部即可。 但是如果堆疊是鍊表結構,則必須乙個接乙個地釋放堆空間,直到堆疊的底部,這是沒有必要的,因為它是乙個陣列。

  6. 匿名使用者2024-01-24

    好吧,我只是來做任務的。

  7. 匿名使用者2024-01-23

    #include

    Define StackSize 100 假定最多有 100 個預分配堆疊空間的元素。

    typedef char elementtype;假設堆疊元素的資料型別是 Character ,可以在這裡自行設定。

    typedef struct

    seqstack;

    空堆疊。 void initstack(seqstack *s) 判定堆疊為空。

    int stackempty(seqstack *s) 新增到堆疊中。

    void push(seqstack *s,elementtype x)

    從堆疊中出來。 elementtype pop(seqstack *s)} 獲取堆疊的頂部元素(只想知道堆疊頂部的值,而不是堆疊之外)elementtype gettop(seqstack *s)else return s->data[s->top];

    int main()

  8. 匿名使用者2024-01-22

    你是資料結構中的佇列問題,而不是堆疊問題。 head 表示佇列頭,刪除時刪除佇列頭元素,tail 表示佇列尾部,插入時插入佇列尾部元素。

    程式中的這種說法是不正確的。 括號只有一半,但那一半呢? *p_y=qp++head];

    至於需要的 main 功能,如果是佇列問題,也會涉及到一般佇列或迴圈佇列,所以無法寫給你。

  9. 匿名使用者2024-01-21

    對不起,看來我誤會了,這是乙個修改過的”。

    順序堆疊包括

    #include

    #define maxsize 100

    typedef struct

    sqstack;

    void pushstack(sqstack *s,int x)。

    void popstack(sqstack *s) 解堆疊。

    int getstacktop(sqstack s) 採用堆疊的頂部元素。

    main()

    while(i!=5);

    return 0;

    鏈堆“包括

    #include

    typedef struct snode

    snode,*linkstack;

    linkstack top;

    linkstack pushstack(linkstack top,int x) 新增到堆疊中。

    linkstack popstack(linkstack top) 解堆疊。

    else printf("堆疊是空的,無法取消堆疊! "); return 0;

    int getstacktop(linkstack top) 獲取堆疊的頂部元素。

    main()

    while(i!=5);

    return 0;}

  10. 匿名使用者2024-01-20

    我可以負責任地告訴你,不。

    您可以轉到下乙個 CHM 格式的“C 庫函式查詢”。

  11. 匿名使用者2024-01-19

    那些都是偽**,書上說得很清楚。

  12. 匿名使用者2024-01-18

    看乙個簡單的堆疊實現,所有的**都寫在乙個標頭檔案中,在實踐中,最好是將宣告和實現分開。

    #ifndef stack_h

    #define stack_h

    class stack

    stack::stack()

    stack::stack(const stack ©)stack& stack::operator =(const stack ©)

    return *this;

    stack::~stack()

    int stack::getheight() constbool stack::isempty()element[count++]e;

    return true;

    bool stack::pop(int &e)e = element[count--]

    return true;

    bool stack::top(int &e) const#endif

相關回答
21個回答2024-06-14

取決於它是在 scanf 還是 printf 中使用。

在 scanf 中,新增 * 的部分將被忽略,並且不會被引數檢索。 >>>More

14個回答2024-06-14

你能說清楚嗎,我不知道你的意思。 是否要在 main 函式中呼叫乙個函式,然後不知道如何定義被呼叫的函式? 如果是這樣的話,我可以告訴你。 >>>More

22個回答2024-06-14

所謂函式返回值,就是函式在操作完成後反饋給呼叫它的父函式或系統的值,這個值可以是各種變數型別。 >>>More

28個回答2024-06-14

sqrt(i*;

在 C++ 中,您必須指定什麼型別,您的 i 是 int 型別,並且必須將其轉換為浮點。 >>>More

18個回答2024-06-14

char *a 是指向 char 型別的指標變數的宣告;

此時,a 未初始化,也不指向任何資料; >>>More