當前位置:首頁 » 編程語言 » c語言申請鏈棧空間
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言申請鏈棧空間

發布時間: 2022-07-23 19:46:09

c語言數據結構中鏈棧的問題

這個鏈棧應該就是一個用鏈表弄的後進先出的棧結構。top指針永遠指向棧的最上面的那個節點。
這個函數是新加一個節點到這個棧中,首先分配了空間給s,s是要新加入這個棧的那個節點。
s->next=top;就是讓s指向棧的最上面的那個元素。top=s;因為現在最上面的節點是s了,所以讓top指向s,使s成為棧頂指針。返回的就是棧的頂上那個節點的指針。這樣循環調用這個函數就可以不斷的添加新節點,加入的新節點總是指向前面的那個節點,同時新加入的節點成為頭節點。

㈡ c語言中,如何申請較大的內存空間

用malloc應該可以的吧

再不行,用靜態的,如p[512*1024*1024]
聲明成全局的,因為局部變數在棧中,棧沒有這么大

㈢ c語言,看看下面的一個鏈表,要不要申請空間

沒錯 指針都賦予了實際的指向(指向一個節點) 而節點的空間在變數聲明時就已經分配好了(在程序的棧中分配空間,即ESP寄存器減去某個值 具體請查看計算機原理) 而在實際運用中 程序開始並不知道需要多少個節點 所以採用的是堆上分配內存(c++的new 運算符 和c中的malloc都屬於這一類 堆的分配是由操作系統分配的 操作系統負責管理堆內存)

㈣ 在C語言中該怎樣建立棧具體代碼是什麼

1.棧空間(stack段)用來存放函數中的局部變數和函數調用時的上下文。
2.
全局變數和靜態變數存放於進程的數據段。
3.
windows下進程的棧空間會自動增長,一般不會出現空間不足的問題;
4。如果變數實在太大,甚至大於棧可增長的范圍,如數百兆,則會編譯出錯。

㈤ c語言指針申請空間問題(簡單)

這個你只要了解指針的用法你就明白了,指針是指向地址的一個數據類型 比如int b = 2; int *a = &b;那麼a就指向b所在的地址。最通俗的就是a是門牌號b是房子,吧a掛在b上你就可以通過a找到b;並且如果不限制你,你也可以進入這個房子修改裡面的東西。 回來說你上面的問題,如果換成
char *c;那麼c就是個門牌號,如果不用malloc申請空間,就相當於只有門牌號沒有房子,你通過c這個門牌號找到的房子不是你的,但是你還欺騙這些字元串說這里有房子,他們相信你了,他們進去了就和原來主人打架,然後就把房子拆了這就出錯了。malloc相當於給你自己建房子,你就可以合法居住了。每個門牌號都要有一個屬於自己的合法房子所以你說的移到下一個數據域時還要重新申請空間,是因為你的門牌號變了!!!!

㈥ C語言:鏈棧的基本操作(代碼如下:幫我看看錯哪了)

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

typedefstructStackNode
{
intdata;
structStackNode*next;
}SNode;

//只進棧一個元素
voidPush(SNode*s,inte)
{
SNode*p;
p=(SNode*)malloc(sizeof(SNode));
s->data=e;
p->next=s;
s=p;
//returns;
}

//連續進棧n個元素
voidPush_Series(SNode*s)
{
printf("請輸入進棧的元素數:");
intn,i,e;
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("請輸入第%2.d個進棧元素:",i+1);
scanf("%d",&e);
Push(s,e);
//printf("此階段的元素為:%2.d ",s->next->data);
}
}
voidPop(SNode*s)
{
if(s==NULL)
{
printf("棧空了!!!");
exit(0);
}
SNode*q;
inte;
e=s->data;
printf("***************** ");
printf("棧頂元素為:%d",e);
printf("***************** ");
q=s;
s=s->next;
free(q);
}

//★:s是形參,你在裡面申請的內存空間地址是無法賦值給調用此函數的s的!
voidInirStack(SNode**s) //★:∴應用指針的指針!(或者C++里用引用)
{
*s=(SNode*)malloc(sizeof(SNode));
(*s)->next=NULL;
}

intmain()
{
SNode*s; //★你這個s沒有申請內存空間!
/*
SNode*s=(SNode*)malloc(sizeof(SNode));
s->next=NULL;*/
InirStack(&s); //★此處要把指針的指針代入
Push_Series(s);
Pop(s);
printf("Helloworld! ");
return0;
}