資料結構 棧(附數制轉換練習)

2021-07-23 04:12:36 字數 3217 閱讀 6760

棧的adt:

adt stack is 

operations

stack createemptystack(void)

建立乙個空棧

int isempty (stack st)

判斷棧是否為空棧

void push (stack st, datatype x)

往棧中插入乙個元素

void pop (stack st)

從棧中刪除乙個元素

datatype top (stack st)

求棧頂元素的值

end adt stack

寫棧的標頭檔案seqstack.h如下:

其中包括建立棧的結構體和棧操作函式的宣告

#ifndef seqstack_h

#define seqstack_h

struct seqstack

;typedef struct seqstack *pseqstack; // 定義順序棧型別

pseqstack createmptystack_seq(int m); // 建立空順序表

int isemptystack_seq(pseqstack pastack); // 判斷乙個棧是否為空

void push_seq(pseqstack pastack, int x); // 進棧

void pop_seq(pseqstack pastack); // 刪除棧頂元素

int pop_seq_return(pseqstack pastack); // 刪除棧頂元素,同時返回棧頂元素

int top_seq(pseqstack pastack); // 當pastack所指的棧不為空棧時,求棧頂元素的值

#endif

然後寫相關函式的c檔案。 stack.c

其中包括對棧處理的一些函式。詳見標頭檔案宣告注釋

#include 

#include

#include "seqstack.h"

#define true 1

#define false 0

// 建立空順序棧

pseqstack createmptystack_seq(int m)

else

} else

}// 判斷乙個棧是否為空

int isemptystack_seq(pseqstack pastack)

// 進棧

void push_seq(pseqstack pastack, int x)

else

}// 刪除棧頂元素

void pop_seq(pseqstack pastack)

else

}// 刪除棧頂元素,同時返回棧頂元素

int pop_seq_return(pseqstack pastack)

else

return temp;

}// 當pastack所指的棧不為空棧時,求棧頂元素的值

int top_seq(pseqstack pastack)

else

}void print(pseqstack pastack)

printf("現在棧內元素為:");

for(i=0; i<=pastack->t; i++)

printf("\n");

}

最後列印棧內元素沒有使用彈出輸出的方式,而採用了讀取輸出的方式,這樣執行輸出操作後,不會影響棧本身儲存的內容。

最後是主函式:

#include 

#include

#include "seqstack.h"

#define true 1

#define false 0

void main()

while (ch != '\n');

// 判斷棧是否為空

printf("\n判斷棧是否為空(返回1為空):");

printf("%d\n", isemptystack_seq(p));

// 列印輸出

print(p);

// 進棧

printf("\n向棧中新增乙個元素:\n");

temp = 5;

printf("新增的元素為:%d\n", temp);

push_seq(p, temp);

print(p);

// 出棧

printf("\n彈出棧中乙個元素:\n");

temp = pop_seq_return(p);

printf("ok, 彈出的元素為:%d\n", temp);

print(p);

system("pause");

return

0;}

附帶數制轉換練習,十進位制轉二進位制/八進位制/十六進製制

執行時自行匯入seqstack.h 和 stack.c 檔案,否則無法執行

數制轉換**:

#include 

#include

#include "seqstack.h"

// 實現八進位制轉換

void octconversion(pseqstack ps, int n)

printf("轉換為八進位制後的結果:\n");

while(!isemptystack_seq(ps))

printf("\n");

}// 二進位制的轉換

void binconversion(pseqstack ps, int n)

printf("轉換為二進位制後的結果:\n");

while(!isemptystack_seq(ps))

printf("\n");

}// 十六進製制轉換

void hexconversion(pseqstack ps, int n)

push_seq(ps, tmp);

n = n/16;

}printf("轉換為十六進製制後的結果:\n");

while(!isemptystack_seq(ps))

else

pop_seq(ps);

}printf("\n");

}int main()

漲姿勢一下:二進位制 bin 八進位制 oct 十六進製制 hex

資料結構實踐 數制轉換 棧

本文是針對資料結構基礎系列網路課程 3 棧和佇列的實現專案。專案 數制轉換 把十進位制的整數轉換為任一進製數輸出。請利用棧設計演算法,並實現程式。參考解答 解法 標頭檔案sqstack.h請見 順序棧演算法庫 使用鏈棧也可以。include include sqstack.h void multib...

資料結構實踐 數制轉換 棧

專案 數制轉換 把十進位制的整數轉換為任一進製數輸出。請利用棧設計演算法,並實現程式。提示 要轉換為r進製,則原來的數逐次除以基數r 除完之後用商再除 直到商為0,得到的一系列餘數的逆序就是轉換結果。這裡的 逆序 意味著後產生的餘數,會先輸出,後進先出,棧的機會來了 參考解答 解法 標頭檔案sqst...

資料結構 棧的實現之數制轉換

常用的進製有四種 二進位制 八進位制 十進位制 十六進製制。他們之間都可以進行倆倆的互相轉換 有一種轉換方法為餘數法,其轉換思想與棧的儲存正好適應。適用於十進位制轉換為二進位制 八進位制 十六進製制 餘數法 連續除以基,直到商為0,從低到高紀錄數值為轉換結果。因為結果是從低到高紀錄的所以使用到棧,先...