c語言出棧指令,c語言進棧出棧完整代碼

本文目錄一覽:

c語言的簡單的進棧出棧

就用這堆函數就可以了,不懂再追問

#include

string.h

#define

MaxSize

100

int

mystack[MaxSize];/*

第0個單元保存現在的長度

*/

/*

初始化函數

*/

void

init_stack(int*

stack){

memset(stack,0,sizeof(stack));

}

/*

入棧函數

*/

void

push_back(int*

stack,int

num){

if(stack[0]MaxSize-1){

++stack[0];

stack[

stack[0]

]

=

num;

}

else{

printf(“ERORR!\n”);

}

}

/*

返回棧空間

*/

int

size(int*

stack){

return

stack[0];

}

/*

返回棧頂函數

*/

int

top(int*

stack){

if(stack[0]0){

return

stack[

stack[0]

];

}

else{

printf(“ERORR!\n”);

return

-1;

}

}

/*

出棧函數

*/

void

pop(int*

stack){

if(stack[0]0){

–stack[0];

}

else{

printf(“ERORR!\n”);

}

}

C語言 進棧和出棧:

閑得沒事幹,跟你詳細講講吧。

首先要弄明白一點,棧的結構是「先進後出「的,就像你堆積木一樣,第一根放在最底層的地面上,然後一根一根往上堆。前一個放上去的總是被後一個放上去的壓在底下。那我當我再想裡面放一根的時候,總不能放中間或者放底下吧(除非你很無聊 很寂寞 閑的蛋疼了 先一根根把堆在上面的全部拿出來 然後把要放進去的那根放上去 最後又把剛才搬下來的有重新搬上去……此處省去幾萬字)所以要往上面加東西的時候,就得放在最上面。

以上就是進棧的原理,怎麼出棧呢,很簡單,直接從」積木”的最頂端取下來就行了。

ok,以上比喻完了,希望你能看得明白。接下來講程序不說積木了:),由上面的分析 我們可以知道一個道理,對於棧的操作,棧頂的元素很重要(也就是積木最上面的那根)。為什麼呢。無論是出棧還是進棧,都跟那哥們有直接的聯繫。你想啊,如果要是有元素要進棧的話,那麼它就不能當「老頂」了,那老頂之位就要交給壓在它上頭那位了;如果出棧呢,它也不能當老頂了,老頂之位就要交到原來壓在它底下的那個。

ok,所以一般的棧都將棧頂的那個元素所在的位置(內存地址–數組類型的,或者指針—節點類型的)視為棧的棧頂~!通過它來對棧進出進行操作。

一般來說(或者在我出生以來看到過的)棧有兩種內存結構(注意是是內存結構,有的書說是存儲結構,都一樣一樣滴),一種是連續的,一種是不連續的,連續的基本上就是數組了,不連續的基本上就是鏈表類型的啦。你上面的程序就是鏈表類型的,每個節點都有個指針指向它「底下」的節點(我覺得「底下」比下一個更容易理解)。通過這種你鏈我 我鏈它的方式,把一組數據連在一起。

進棧:

int Push(STACK *S,int e)//進棧

{

SNode *p; //step1:這個編程習慣不好,沒定義一個指針就應該把它指向NULL

p=(SNode *)malloc(sizeof(SNode)); //step2:為你的節點分配內存

if(!p)

return ERROR;

p-data=e; //step3:當然了,你那個傳進來的e是相當於temp,用來傳值的,ok,那就把它的 數據給p咯,p實際指向的是一塊內存塊,用來裝節點的

p-next=S-top; //step4:回到上面積木問題,進棧的時候,原來的老頂要給新來的讓位,但是如果這時候的top節點直接賦給新來的元素的話,那麼那個原來的老頂是不是從此以後都找不到它了?所以,先把新來的元素的next指針指向當前的老頂,這樣的話,以後通過next指針就可以找到它了。

S-top=p; //當然,都已經處理好以前老頂的身後事了(就是以後可以通過p的next指針找到它了)那麼「讓位」就可以進行了,這時,p便戴上了 老頂 之帽了

S-length++; //既然人數都增加了,那就到公安局登記入戶口吧

return OK; //一切over,現在這個棧stack的棧頂位置就是你剛才新加進來的p了,通過stock.top指針就可以訪問到棧頂,然後出棧也是同理的,ok,all over

}

C語言中什麼是出棧?

棧是一種數據結構,一個棧相當於一個盒子,把東西(數據)放入盒子里的過程叫做入棧,把東西從盒子里取出來的過程叫做出棧。棧還有一個特殊的規則,就是先進後出,即盒子里的東西只能疊加擺放,放進去的下一件東西只能堆在前一件東西的上面,取出時只能先取出盒子最上面的一件東西。出棧也就是將棧指針所指的數據從棧中彈出的過程,每一次出棧的一定是棧頂元素,出棧後棧指針向下移動一位指向下一個元素。習慣上入棧用PUSH表示,出棧用POP表示。

用C語言實現入棧出棧

#include

stdio.h

int

stack[100];

/*100個棧空間*/

int*

sp

=

stack;

/*棧指針指向棧底*/

#define

push(

i

)

{

*sp++

=

i;

}

/*push一個數*/

#define

pop()

(*–sp)

/*pop一個數並返回*/

int

main()

{

int

i;

for

(

i

=

0;

i

10;

++i

)/*push

0~9*/

push(

i

);

for

(

i

=

0;

i

10;

++i

)/*輸出9~0*/

printf(

“%d

“,

pop()

)

;

}

C語言 出棧操作Pop(struct SqStack * MyStack, ElemType *e

#include stdio.h

#include conio.h

#include stdlib.h

#define elemType int /* 鏈棧元素數據類型 */

#define SNODE_SIZE sizeof (struct sNode) /* 鏈棧結點空間大小 */

#define status int /* 狀態型變數 */

#define OVERFLOW -1 /* 內存溢出狀態碼 */

#define ERROR 0 /* 錯誤狀態碼 */

#define OK 1 /* 正確狀態碼 */

/* 鏈棧結點存儲結構 */

typedef struct sNode {

elemType data;

struct sNode *next;

} sNode, *sNodePtr;

/* 鏈棧存儲結構 */

typedef struct linkStack {

sNodePtr top; /* 棧頂指針 */

} linkStack;

/* 初始化 */

/* 操作結果:構造一個帶頭結點的空鏈棧S */

void initStack (linkStack *S) {

S-top = (sNodePtr) malloc (SNODE_SIZE); /* 產生頭結點,棧頂指針指向此頭結點 */

if (!S-top) /* 內存分配失敗 */

exit (OVERFLOW);

S-top-next = NULL;

}

/* 銷毀 */

/* 初始條件:鏈棧S已存在。操作結果:銷毀鏈棧S */

void destroyStack (linkStack *S) {

sNodePtr p, q;

p = S-top; /* p指向S的頭結點 */

while (p) {

q = p-next; /* q指向p的下一個結點 */

free (p); /* 回收p指向的結點 */

p = q; /* p移動到下一個結點 */

} /* 直到沒有下一個結點 */

}

/* 判斷鏈棧是否為空 */

/* 初始條件:鏈棧S已存在。操作結果:若S為空鏈棧,則返回TRUE,否則返回FALSE */

status stackIsEmpty (linkStack *S) {

return S-top-next == NULL;

}

/* 入棧 */

/* 操作結果:在S的棧頂插入新的元素e */

status push (linkStack *S, elemType e) {

sNodePtr p;

p = (sNodePtr) malloc (SNODE_SIZE); /* 產生新結點 */

if (!p) /* 內存分配失敗 */

exit (OVERFLOW);

p-data = e;

p-next = S-top-next; /* 將新結點鏈接到原棧頂 */

S-top-next = p; /* 棧頂指向新結點 */

}

/* 出棧 */

/* 操作結果:刪除S的棧頂元素,並由e返回其值 */

status pop (linkStack *S, elemType *e) {

sNodePtr p;

if (stackIsEmpty (S))

return ERROR;

p = S-top-next; /* p指向鏈棧的第一個結點 */

*e = p-data; /* 取出數據 */

S-top-next = p-next;

free (p); /* 刪除該結點 */

    if (S-top == p) /* 棧為空 */

     S-top-next = NULL;

    

    return OK;

}

/* 列印棧內容 */

/* 初始條件:鏈棧S已存在。操作結果:當棧不為空時,列印棧內容並返回OK,否則返回ERROR */

status printStack (linkStack *S) {

sNodePtr p;

if (stackIsEmpty (S)) {

puts (“The stack is empty! “);

return ERROR;

}

p = S-top-next;

while (p) {

printf (“%d\t”, p-data);

p = p-next;

}

putchar (‘\n’);

return OK;

}

int main (void) {

linkStack S;

elemType e; 

elemType a, b, c, d;

a = 1; b = 2; c = 3; d = 4;

initStack (S);

push (S, a);

push (S, b);

push (S, c);

push (S, d);

puts (“Push 4 elements”);

printf (“S:\t”);

printStack (S);

putchar (‘\n’);

pop (S, e);

puts (“Pop 1 element”);

printf (“S:\t”);

printStack (S);

destroyStack (S);

getch (); /* 屏幕暫留 */

return 0;

}

如有問題,可以點擊頭像聯繫我

關於進棧出棧的C語言

雙擊每一條錯誤提示,就會指示是哪一行出錯,或者是其上一行的末尾有錯誤。因為運行環境不同所以沒辦法告訴你錯在哪

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/311161.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-05 13:23
下一篇 2025-01-05 13:23

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變數和數…

    編程 2025-04-29
  • 打造照片漫畫生成器的完整指南

    本文將分享如何使用Python編寫一個簡單的照片漫畫生成器,本文所提到的所有代碼和技術都適用於初學者。 一、環境準備 在開始編寫代碼之前,我們需要準備一些必要的環境。 首先,需要安…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在著手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29

發表回復

登錄後才能評論