基礎操作需要創建鏈表來存儲數據
使用尾插法和尾刪法來表示棧中的入棧和出棧
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
typedef struct node { int data; struct node* next; }Node,*LPNode; LPNode creatnode( int data) { LPNode newnode = (LPNode) malloc ( sizeof (Node)); assert (newnode); newnode->data = data; newnode->next = NULL; return newnode; } void insertbytail(LPNode &head, int data) //這里要么傳引用要么傳二級指針因為這里head賦值并沒有對主函數里面的head改變 { if (head == NULL) { head = creatnode(data); } else { LPNode newnode = creatnode(data); LPNode pmove = head; while (pmove->next!=NULL) { pmove = pmove->next; } pmove->next = newnode; } } void deletetail(LPNode head) { LPNode pronode = head; if (head == NULL) { return ; } LPNode posnode = head->next; if (pronode->next == NULL) { cout << pronode->data; free (pronode); return ; } while (posnode->next!= NULL) { pronode = posnode; posnode = posnode->next; } cout << posnode->data ; free (posnode); pronode->next = NULL; } |
創建棧結構
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
typedef struct stack { int top; //用來判斷是否為空 LPNode head; }Stack,*LPStack; //描述一個棧的最初始的狀態 LPStack creatstack() { LPStack stack = (LPStack) malloc ( sizeof (Stack)); assert (stack); stack->top = 0; stack->head = NULL; return stack; } |
出棧入棧就是表現為鏈式結構的表尾插入和刪除
1
2
3
4
5
6
7
8
9
10
|
void push(LPStack stack, int data) { insertbytail(stack->head, data); stack->top++; } void pop(LPStack stack) { deletetail(stack->head); stack->top--; } |
判斷棧是否為空即判斷 top==0
1
2
3
4
|
bool empty(LPStack stack) { return stack->top == 0; } |
代碼實現
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
int main() { LPNode head = NULL; LPStack stack = creatstack(); int n; int num; cin >> num; //表示數 cin >> n; //表示進制 while (num) { push(stack,num%n ); num /= n; } while (!empty(stack)) { pop(stack); } return 0; } |
以上就是c/c++鏈式堆棧描述進制轉換問題示例解析的詳細內容,更多關于c/c++鏈式堆棧描述進制轉換的資料請關注服務器之家其它相關文章!
原文鏈接:https://blog.csdn.net/weixin_56366633/article/details/121243865