日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c 语言栈,C语言栈

發布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c 语言栈,C语言栈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言實現簡單的棧結構

今天看到一個問題是要交換兩個變量的值并且不能使用中間變量,首先想到的方法就是用數學的方法:

int a = 10,b = 12;

a = a + b; // 求和

b = a - b; // 和減去b得到的是a的值

a = a - b; // 和減去a(此時的b是最初a的值)得到b 的值

這種方法很容易看得懂。

后來想用棧先進后出的特性,先把a、b按順序壓棧,然后a等于先出棧的b,b等于后出棧的a,于是就嘗試下用C語言實現一個簡單的棧結構。

首先是用結構體定義一個棧:

struct stack{

int top; // 記錄棧中現有多少個數據,data[top]表示棧頂

int data[10]; // 表示棧中最多存10個數據

};

接下來是棧的一些基本操作:

壓棧:

// 將一個數據壓棧 成功返回1 不成功返回0 (棧溢出了)

int push(myStack * stack, int data){

// 判斷是否溢出

if (stack->top + 1 <= N - 1) {

stack->data[++stack->top] = data;

return 1;

}else{

return 0;

}

}

出棧:

// 出棧 如果是空 返回-1 否則返回棧頂的數據 然后棧中元素數量減一

int pop(myStack * stack){

if (is_empty(stack)) {

return -1;

}else{

return stack->data[stack->top--];

}

}

判空處理:

// 判斷棧是否為空

int is_empty(myStack * stack){

if (stack->top == -1) {

return 1;

}else{

return 0;

}

}

最后使用棧結構對兩個變量值進行交換:

int a = 10, b = 12;

initStack();

push(pS, a);

push(pS, b);

a = pop(pS);

b = pop(pS);

printf("a = %d, b = %d\n",a,b);

遇到的問題:

開始的時候對棧的操作的一些函數的參數我都是用結構體類型傳的,而不是現在的結構體指針類型。后來運行發現對結構體操作之后結構體的內容并沒有改變。然后改成了結構體指針類型發現運行正確,測試了下發現用結構體類型參數傳入函數中是無法操作的,據說C++可以,沒試。

好吧,就這樣

全部代碼:

#include

#define N 10

struct stack{

int top; // 記錄棧中有多少個數據,data[top]表示棧頂

int data[N];

};

typedef struct stack myStack;

myStack S;

myStack *pS = &S;

void initStack(){

pS->top = -1;

}

// 判斷棧是否為空

int is_empty(myStack * stack){

if (stack->top == -1) {

return 1;

}else{

return 0;

}

}

// 設置棧為空

void set_empty(myStack * stack){

stack->top = -1;

}

// 將一個數據壓棧 成功返回1 不成功返回0 (棧溢出了)

int push(myStack * stack, int data){

// 判斷是否溢出

if (stack->top + 1 <= N - 1) {

stack->data[++stack->top] = data;

return 1;

}else{

return 0;

}

}

// 出棧 如果是空 返回-1 否則返回棧頂的數據 然后棧中元素數量減一

int pop(myStack * stack){

if (is_empty(stack)) {

return -1;

}else{

return stack->data[stack->top--];

}

}

int main() {

int a = 10, b = 12;

initStack();

push(pS, a);

push(pS, b);

a = pop(pS);

b = pop(pS);

printf("a = %d, b = %d\n",a,b);

return 0;

}

總結

以上是生活随笔為你收集整理的c 语言栈,C语言栈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。