導航:首頁 > 源碼編譯 > 鏈式棧編譯行編譯程序

鏈式棧編譯行編譯程序

發布時間:2022-12-28 10:08:25

Ⅰ 如何用C語言創建一個鏈棧,並進行操作

1 思路: 主要是鏈表的插入和刪除操作

2 代碼

#include<stdio.h>
#include<stdlib.h>
typedefstructnode
{
intdata;
structnode*next;
}node_type;

voidpush(node_type*&stack,intelem){
node_type*node=(node_type*)malloc(sizeof(node_type));
node->data=elem;
node->next=stack;
stack=node;
}
intpop(node_type*&stack){
intelem=stack->data;
node_type*node=stack;
stack=stack->next;
free(node);
returnelem;
}
boolIsEmpty(node_type*stack){
returnstack==NULL;
}
voiddisplay(node_type*stack){
while(stack){
printf("%d",stack->data);
stack=stack->next;
}
puts("");
}
voiddestroy(node_type*stack){
while(!IsEmpty(stack)){
pop(stack);
}
}
intmain(){
puts("(1)建立空鏈棧");
node_type*stack=NULL;
puts(" (2)調用進棧函數,將從鍵盤輸入的數據元素逐個進棧,輸入0結束;");
intnum;
scanf("%d",&num);
while(num!=0){
push(stack,num);
scanf("%d",&num);
}
puts(" (3)顯示進棧後的數據元素");
display(stack);
puts(" (4)調用兩次出棧函數,顯示出棧後的數據元素");
if(!IsEmpty(stack))
printf("%d ",pop(stack));
if(!IsEmpty(stack))
printf("%d ",pop(stack));

destroy(stack);
getchar();
getchar();
return0;
}

3 運行效果

Ⅱ 關於鏈棧的實現問題

InitStack(S);
調用它並不能改變main()函數中的變數S的指向,從 InitStack(S);返回之後,S還是指向main()函數中定義時指向的值。如果希望調用 InitStack(S);就需要對 InitStack();做出修改:

void InitStack(LinkStack *S)
{
*S=(LinkStack)malloc(sizeof(SNode));
(*S)->next=NULL;
}

並且把main()函數中的
InitStack(S);
改為
InitStack(&S);

Ⅲ 順序棧與鏈式棧的區別

順序棧的實現在於使用了數組這個基本數據結構,數組中的元素在內存中的存儲位置是連續的,且編譯器要求我們在編譯期就要確定數組的大小,這樣對內存的使用效率並不高。

一來無法避免因數組空間用光而引起的溢出問題,二在系統將內存分配給數組後,則這些內存對於其他任務就不可用;

而對於鏈棧而言,使用了鏈表來實現棧,鏈表中的元素存儲在不連續的地址,由於是動態申請內存,所以我們可以以非常小的內存空間開始,另外當某個項不使用時也可將內存返還給系統。

Ⅳ 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;
}

Ⅳ 鏈式棧。程序編譯通過,但一運行就死。貌似init函數那裡有問題,但是不知原因何在,求高手解救!

不多說了:
測試結果:
56 84 23 67 34 45
請按任意鍵繼續. . .

錯誤修改:
PSTACK S=(PSTACK)malloc(sizeof(STACK)); //只有給S申請一個合法的地址,才能把它作為參數去傳遞給init函數,應為init函數要對S指向的地址進行賦值操作。 【原來的S是游離指針】
init(S);

好運!

編程實現鏈棧的入棧和出棧操作。 在線等著你哦!

#include<stdio.h>
#include<stdlib.h>
typedefstructSnode
{
intdata;/*數據域*/
structSnode*next;/*指針域*/
}SNODE,*LinkStack;/*其中SNODE為鏈棧中的結點類型名,LinkStack為指向結點的指針類型名*/
//////////////////
LinkStackPush(LinkStacktop,inte)
/*將數據元素e壓入到鏈棧top中,使其成為新的棧項元素*/
{
LinkStackp;
p=(LinkStack)malloc(sizeof(SNODE));/*生成一個新的結點*/
if(!p)/*如果分配空間失敗,則函數返回"OVERFLOW"*/
printf("StackisOverflow ");
p->data=e;/*新結點的數據域賦值*/
p->next=top;/*修改鏈使新結點插入到鏈表的頭部,並成為新的棧頂元素*/
top=p;
returntop;
}
/////////////
LinkStackPop(LinkStacktop,int*e)
/*將鏈棧top中的棧頂元素從棧中刪除,並用e返回其值*/
{
LinkStackq;
if(!top)/*如果棧空,則函數返回ERROR*/
printf("StackisERROR ");
*e=top->data;/*將被刪的棧頂元素的值保存在e中*/
q=top;/*用q記下待刪的棧頂元素*/
top=q->next;
/*修改鏈使待刪結點從鏈中"卸下",此時被刪結點的後繼成為新的棧頂元素結點*/
free(q);/*釋放被刪結點的存儲空間*/
returntop;
}
/////////
LinkStackStack_display(LinkStacktop)
{
inte;
while(top)
{
e=top->data;
printf("%4d",e);
top=top->next;
}
returntop;
}
/////////////////////
voidmain()
{
LinkStacktop=0;
inti=0,n,e;
printf("pleaseinputthelength:");/*輸入幾個數*/
scanf("%d",&n);
printf("pleaseinputtheValue: ");/*輸入*/
while(i<n)
{
scanf("%d",&e);
top=Push(top,e);
i++;
}
printf("thestackis: ");
Stack_display(top);
printf("pleaseinputtheinsertnode:");
scanf("%d",&e);
top=Push(top,e);
printf("thestackafterpushis: ");
Stack_display(top);
top=Pop(top,&e);
printf("thepopvalueis:%d ",e);
printf("thestackafterpopis: ");
Stack_display(top);
}

調好了麻煩採納一下

閱讀全文

與鏈式棧編譯行編譯程序相關的資料

熱點內容
哪款app經過了方舟編譯 瀏覽:592
php中導出到excel 瀏覽:817
人需要解壓的圖片 瀏覽:513
壓縮文件的天才 瀏覽:366
創客編程基礎知識 瀏覽:697
java初學者中文編譯器 瀏覽:696
stc單片機缺點 瀏覽:622
華為app怎麼刷 瀏覽:13
如何使用word生成加密pdf 瀏覽:989
vc軟體編譯後沒有結果 瀏覽:35
安卓現在使用的編譯器是哪個 瀏覽:188
java獲得文件路徑 瀏覽:608
linux帳號管理 瀏覽:35
編譯程序是干什麼用的 瀏覽:179
linux下編譯程序命令 瀏覽:639
杭州程序員高光 瀏覽:592
如何判斷單片機晶振好壞 瀏覽:943
程序員那麼可愛電視劇免費不卡 瀏覽:21
單片機馬達程序 瀏覽:596
我的世界怎麼用指令做一個伺服器 瀏覽:541