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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

剑指offer之用链表实现栈(带头节点)

發(fā)布時(shí)間:2023/12/4 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指offer之用链表实现栈(带头节点) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 問題

用鏈表實(shí)現(xiàn)棧,棧先進(jìn)后出.

?

?

?

?

2 代碼實(shí)現(xiàn)

#include <stdio.h> #include <stdlib.h>#define true 1 #define false 0typedef struct Node {int value;struct Node *next; } Stack;/**打印棧*/ void print(Stack *stack) {if (stack == NULL){printf("stack is NULL\n");return;}struct Node *p = stack->next;while (p != NULL){printf("value is: %d\n", p->value);p = p->next;}return; }/***給棧添加一個(gè)節(jié)點(diǎn)*/ int add_node(Stack *stack, int value) {if (stack == NULL){printf("stack is NULL\n");return false;}struct Node *node = NULL;node = (struct Node *)malloc(sizeof(struct Node));if (node == NULL){printf("addNode malloc fail\n");return false;}node->value = value;node->next = stack->next;stack->next = node;return true; }/**初始化棧*/ struct Node* init() {struct Node *head = NULL;head = (struct Node *)malloc(sizeof(struct Node));if (head == NULL){return NULL;}head->next = NULL;head->value = 0;return head; }/**打印棧的大小*/ int size_stack(Stack *stack) {if (stack == NULL){return 0;}Stack *head = stack->next;int size = 0;while (head != NULL){++size;head = head->next;}return size; }/**彈出棧頂元素*/ int pop_stack(Stack *stack) {if (stack == NULL){printf("stack is NULL");return false;}struct Node *p = stack->next;if (p == NULL){printf("stack->next is NULL");return false;}stack->next = p->next;free(p);return true; }/**獲取棧頂元素*/ struct Node* top_stack(Stack *stack) {/**if (stack == NULL);這里自己傻逼了,多加了一個(gè)分號(hào)導(dǎo)致程序走到里面{printf("stack1 is NULL\n");return NULL;}**/if (stack == NULL){printf("stack is is is NULL\n");return NULL;}struct Node *p = stack->next;if (p == NULL){printf("stack->next is NULL");return NULL;}return p; }void clear_stack(Stack *stack) {if (stack == NULL){return;}struct Node *q, *p = stack->next;while(p != NULL){q = p;p = p->next;free(q);}stack->next = NULL; }int main() {struct Node *head = init();if (head == NULL){printf("init stack fail\n");return false;}printf("init success\n");add_node(head, 1);add_node(head, 2);add_node(head, 5);add_node(head, 4);add_node(head, 3);print(head);struct Node* top = top_stack(head);if (top != NULL){printf("top value is %d\n", top->value);}printf("stack size is %d\n", size_stack(head));int result = pop_stack(head);if (result == true){printf("pop_stack success\n");}else{printf("pop_stack fail\n");}print(head);printf("stack size is %d\n", size_stack(head));clear_stack(head);if (head == NULL){printf("head is NULL\n");}printf("stack size is %d\n", size_stack(head));head = init();if (head == NULL){printf("init stack fail\n");return false;}printf("init success\n");add_node(head, 6);add_node(head, 5);add_node(head, 2);add_node(head, 1);add_node(head, 9);print(head);printf("stack size is %d\n", size_stack(head));return true; }

?

?

?

?

3 運(yùn)行結(jié)果

init success value is: 3 value is: 4 value is: 5 value is: 2 value is: 1 top value is 3 stack size is 5 pop_stack success value is: 4 value is: 5 value is: 2 value is: 1 stack size is 4 stack size is 0 init success value is: 9 value is: 1 value is: 2 value is: 5 value is: 6 stack size is 5

?

總結(jié)

以上是生活随笔為你收集整理的剑指offer之用链表实现栈(带头节点)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。