-
因為 c 是值傳遞,推送後,如果 stack==null,推送時堆疊的位址無法帶回,所以返回後堆疊仍然是 null,可以這樣修改:
1,plinkstack push(plinkstack stack, int x)
2,stack = push(stack,10);
但是當有資料時,以及推送時要注意第乙個指標。
另外,我想你對 Creat Linkstack 也有問題,劃分空間後,如果不是空的,把指標留空,那麼劃分這個空間的目的是什麼?
-
在程式中使用 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 空間。
-
push(stack,10);
此行上的堆疊指標尚未修改。
正確的用法是將函式的這一端宣告為指標:push(plinkstack* stack);
呼叫方使用 push(&stack,10);
-
這兩個函式之一用於銷毀堆疊,另乙個是清空堆疊 clearstack
銷毀是釋放整個堆疊,而清空只是從堆疊中刪除元素。
由於您的堆疊元素是 int 基本變數,因此堆疊元素的內容直接儲存在堆疊空間中,並且沒有額外的應用程式來儲存堆疊元素,因此在從堆疊中刪除堆疊元素時無需呼叫 free 函式。
實際上,您的 DestroyStack 可以非常簡單,如下所示:
int destroystack(stack &s) 至於clearstack,書上寫的沒問題,清空堆疊,不是為了釋放堆疊空間,而是清除堆疊中的元素,最直接的方法是將頂部指標指向堆疊底部,當堆疊頂部和堆疊底部的指標相同時, 這意味著堆疊中沒有元素,堆疊空間仍然保留,下次可以繼續按堆疊元素並反彈堆疊。
-
沒有必要一一做。 不要狹隘地看待“清空”的概念,其實只要將頂部指標指向堆疊的底部即可。 但是如果堆疊是鍊表結構,則必須乙個接乙個地釋放堆空間,直到堆疊的底部,這是沒有必要的,因為它是乙個陣列。
-
好吧,我只是來做任務的。
-
#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()
-
你是資料結構中的佇列問題,而不是堆疊問題。 head 表示佇列頭,刪除時刪除佇列頭元素,tail 表示佇列尾部,插入時插入佇列尾部元素。
程式中的這種說法是不正確的。 括號只有一半,但那一半呢? *p_y=qp++head];
至於需要的 main 功能,如果是佇列問題,也會涉及到一般佇列或迴圈佇列,所以無法寫給你。
-
對不起,看來我誤會了,這是乙個修改過的”。
順序堆疊包括
#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;}
-
我可以負責任地告訴你,不。
您可以轉到下乙個 CHM 格式的“C 庫函式查詢”。
-
那些都是偽**,書上說得很清楚。
-
看乙個簡單的堆疊實現,所有的**都寫在乙個標頭檔案中,在實踐中,最好是將宣告和實現分開。
#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
取決於它是在 scanf 還是 printf 中使用。
在 scanf 中,新增 * 的部分將被忽略,並且不會被引數檢索。 >>>More
你能說清楚嗎,我不知道你的意思。 是否要在 main 函式中呼叫乙個函式,然後不知道如何定義被呼叫的函式? 如果是這樣的話,我可以告訴你。 >>>More
sqrt(i*;
在 C++ 中,您必須指定什麼型別,您的 i 是 int 型別,並且必須將其轉換為浮點。 >>>More