c語言初始化順序棧,C語言順序棧

本文目錄一覽:

C語言編程實現順序棧的初始化,入棧,出棧,取棧頂元素,顯示操作

#define STACKSIZE 100

int mstack[STACKSIZE],top,bottom;

void mInitStack() { top=bottom=0; }

void mPush(int x) { if ( top-bottom=STACKSIZE ) { mstack[top]=x; top++; } }

int mPop() { int r=0; if ( topbottom ) { r=mstack[top]; top–; } return r; }

void mShowStack() { int i; printf(“[“); for ( i=bottom;itop;i++ ) printf(“%d “,mstack[i]); printf(“]\n”); }

void main()

{

    int i,n,x,loop=1,s;

    char buffer[80];

    mInitStack();

    scanf(“%d”,n); for ( i=0;in;i++ ) { scanf(“%d”,x); mPush(x); }

    mShowStack();

    while ( loop )

    { buffer[1]=0; gets(buffer); s=1;

        switch ( buffer[1] )

        { case ‘O’:

            case ‘o’: x=mPop(); break;

            case ‘U’:

            case ‘u’: x=atoi(buffer+5); mPush(x); break;

            case ‘n’:

            case ‘N’: loop=0; break;

            default: s=0; break;

        }

        mShowStack();

    }

    mShowStack();

}

C語言中如何初始化棧 每個元素均為空

1如果順序棧的定義如下

typedef struct

{datatype data[stacksize];

int top;

}SeqStack;

—則置空棧的操作如下

void InitStack(seqstack *s)

{s-top=-1;

}

2如果鏈棧的定義如下

typedef struct node

{datatype data;

struct node *next;

}LinkStack;

—則置空棧的操作如下

void InitStack(linkstack *s)

{s-top=null;

}

C語言順序棧的問題

for(i = s-top; i=0; i–) { //遍歷棧

printf(“%d-“,s-data);

}

這裡data你定義的是數組名所以

printf(”%d-“,s-data[i]);

求採納,求經驗,求懸賞

希望能解決您的問題。

求用C語言編寫一個程序實現順序棧初始化,出棧,入棧,判棧空,判棧滿,急需,謝謝

#define STACK_SIZE 100

#define PUSH_POP_SUCCESS 1

#define PUSH_POP_ERROR 0

struct _stackbuf {

int _collection[STACK_SIZE];

int _top;

};

typedef struct _stackbuf S_STACK;

typedef unsigned int u_int_f;

// 入棧

u_int_f push(S_STACK *stack, int d){

if (stack-_top = STACK_SIZE) return PUSH_POP_ERROR;

stack-_collection[stack-_top++] = d;

return PUSH_POP_SUCCESS;

}

// 出棧

u_int_f pop(S_STACK *stack, int *e){

if (!stack-_top) return PUSH_POP_ERROR;

*e=stack-_collection[–(stack-_top)];

return PUSH_POP_SUCCESS;

}

int main(){

S_STACK stack = { {0},0 };

push(stack, 1);

push(stack, 2);

push(stack, 3);

int gv = 0;

pop(stack, gv);

printf(“%d\n”, gv);

system(“PAUSE”);

return 0;

}

關於C語言的順序棧的操作

這是我以前寫的,今天不想砍代碼,就發這個了

#includestdio.h

#includestdlib.h

#define N 100

//棧的結構定義

typedef struct

{

int elem[N];

int top;//棧頂

}Stack;

//循環隊列的結構定義

typedef struct

{

int elem[N];

int front;

int rear;

}Queue;

int Greatstack(Stack*);

int GreatQueue(Queue *);

int pop(Stack *s);

void show(Stack *s);

int push(Stack *s);

int popStack(Stack *s);

int enQueue(Queue *q);

int deQueue(Queue *q);

int printQueue(Queue *q);

void conversion();

void main()

{

char exit=’N’;

int ch;

int result,data;

int m,e;

Stack s;

Queue q;

s.top=0;//棧頂指向當前棧頂的下一位置

q.front=q.rear=0;

do

{

system(“CLS”);

printf(“\t\t********************************************\n”);

printf(“\t\t* 1.創建一個順序棧 ……………..(1) *\n”);

printf(“\t\t* 2.出棧………………………..(2) *\n”);

printf(“\t\t* 3.入棧………………………..(3) *\n”);

printf(“\t\t* 4.順序棧中元素依次出棧,並顯示…..(4) *\n”);

printf(“\t\t* 5.創建一個循環隊列……………..(5) *\n”);

printf(“\t\t* 6.進隊………………………..(6) *\n”);

printf(“\t\t* 7.出隊………………………..(7) *\n”);

printf(“\t\t* 8.循環隊列中元素依次出隊,並顯示…(8) *\n”);

printf(“\t\t* 9.十進制數轉換為其它進制數………(9) *\n”);

printf(“\t\t* 10.退出 …………..(10) *\n”);

printf(“\t\t********************************************\n”);

printf(“\n請選擇操作代碼:”);

scanf(“%d”,ch);

switch(ch)

{

case 1:

printf(“創建一個順序棧\n”);

result=Greatstack(s);

if(result==0)printf(“順序棧創建失敗,棧已滿!\n”);

else printf(“順序棧創建成功!\n”);

system(“pause”);

break;

case 2:

printf(“出棧:\n”);

m=pop(s);

if(m==0)printf(“出棧失敗,棧已空!\n”);

else

{

printf(“順序棧出棧成功!\n”);

printf(“該棧剩餘元素為:”);

show(s);

}

//請加入出棧操作的代碼或函數調用

system(“pause”);

break;

case 3:

printf(“進棧:\n”);

printf(“請輸入入棧的元素”);

scanf(“%d”,e);

result=push(s,e);

if(result==0)printf(“棧已滿!\n”);

else

{

printf(“順序棧入棧成功!\n”);

printf(“該棧剩餘元素為:”);

show(s);

}

//請加入進棧操作的代碼或函數調用

system(“pause”);

break;

case 4:

printf(“順序棧中元素依次出棧,出棧序列為:\n”);

popStack(s);

//請加入依次出棧並顯示元素操作的代碼或函數調用

system(“pause”);

break;

case 5:

printf(“創建一個循環隊列\n”);

result=GreatQueue(q);

if(result==0)printf(“循環隊列創建失敗,循環隊列已滿!\n”);

else printf(“循環隊列創建成功!\n”);

system(“pause”);

break;

case 6:

printf(“入隊:\n”);

data=enQueue(q);

if(result=0) printf(“隊已經滿了\n”);

else printf(“入隊成功\n”);

//請加入入隊操作的代碼或函數調用

system(“pause”);

break;

case 7:

printf(“出隊:\n”);

data=deQueue(q);

if(data=0) printf(“隊已經空了\n”);

else printf(“出隊成功\n”);

//請加入依次出隊操作的代碼或函數調用

system(“pause”);

break;

case 8:

printf(“循環隊列中元素依次出隊,出隊序列為:\n”);

//請加入依次出隊並顯示元素操作的代碼或函數調用

data=printQueue(q);

system(“pause”);

break;

case 9:

printf(“十進制數轉換為其它進制數:\n”);

conversion();

//請加入十進制數轉換為其它進制數操作的代碼或函數調用

system(“pause”);

break;

case 10:

getchar();

printf(“\n您是否真的要退出程序(Y/N):”);

exit=getchar();getchar();

break;

default:

printf(“\n無效輸入,請重新選擇…:”);

}

}while(exit!=’y’exit!=’Y’);

}

/*從鍵盤輸入一系列整數,當輸入值為0時,停止輸入,產生順序棧*/

/*返回0表示生成成功,1表示失敗*/

int Greatstack(Stack *s)

{

int e;

s-top=0;//棧頂指向當前棧頂的下一位置

printf(“請依次輸入需要入棧的元素,以0表示輸入結束:”);

do

{

scanf(“%d”,e);

if(e!=0)

{ if(s-top=N)return 0;//棧滿

s-elem[s-top++]=e;

}

}while(e!=0);

}

/*從鍵盤輸入一系列整數,當輸入值為0時,停止輸入,產生循環隊列*/

/*返回0表示生成成功,1表示失敗*/

int GreatQueue(Queue *q)

{

int e;

q-front=q-rear=0;//初始化隊列

printf(“請依次輸入需要入棧的元素,以0表示輸入結束:”);

do

{

scanf(“%d”,e);

if(e!=0)

{ if((q-rear+1)%N==q-front)return 0;//隊滿

q-elem[q-rear]=e;

q-rear=(q-rear+1)%N;

}

}while(e!=0);

return 1;

}

int pop(Stack *s) //出棧

{

if(s-top==0)

return 0;

–s-top;

}

void show(Stack *s) //顯示棧中的元素

{

int i=s-top;

while(i!=0)

{

–i;

printf(“%d “,s-elem[i]);

}

}

int push(Stack *s,int e) //入棧

{

if(s-top=N)return 0;

s-elem[s-top++]=e;

}

int popStack(Stack *s) //順序棧中元素依次出棧,並顯示

{

while(s-top!=0)

{

–s-top;

printf(“%3d”,s-elem[s-top]);

}

return 0;

}

int enQueue(Queue *q) //入隊

{

int e;

printf(“請輸入入棧的元素:”);

scanf(“%d”,e);

if((q-rear+1)%N == q-front) return 0;

q-elem[q-rear]=e;

q-rear=(q-rear+1)%N;

return 1;

}

int deQueue(Queue *q) //出隊

{

int *e;

if(q-front == q-rear) return 0;

e =q-elem[q-front];

q-front=(q-front+1)%N;

return 1;

}

int printQueue(Queue *q) //循環隊列中元素依次出隊,並顯示

{

if(q-front == q-rear) return 0;

for(;q-front!=q-rear;)

{

printf(“%3d”,q-elem[q-front]);

q-front++;

}

}

void conversion() //十進制數轉換為其它進制數

{

Stack p1;

int n,m;

puts(“請輸入需要轉換的元素:”);

scanf(“%d”,n);

puts(“請輸入需要轉換的進制:”);

scanf(“%d”,m);

p1.top=0;

while(n)

{

push(p1,n%m);

n=n/m;

}

popStack(p1);

}

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-20 00:14
下一篇 2024-11-20 00:14

相關推薦

  • AES加密解密算法的C語言實現

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

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

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

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論