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语言栈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ds18b20c语言显示小数位,DS18
- 下一篇: 天使投资备案类型(天使投资备案)