mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 14:18:20 +08:00 
			
		
		
		
	feat(docs/c): add linkedlist_stack.c
This commit is contained in:
		@ -9,7 +9,7 @@
 | 
				
			|||||||
/* 基于链表实现的栈 */
 | 
					/* 基于链表实现的栈 */
 | 
				
			||||||
struct LinkedListStack {
 | 
					struct LinkedListStack {
 | 
				
			||||||
    ListNode* stackTop; // 将头结点作为栈顶
 | 
					    ListNode* stackTop; // 将头结点作为栈顶
 | 
				
			||||||
    size_t stkSize;     // 栈的长度
 | 
					    int stkSize;        // 栈的长度
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct LinkedListStack LinkedListStack;
 | 
					typedef struct LinkedListStack LinkedListStack;
 | 
				
			||||||
@ -19,7 +19,7 @@ void constructor(LinkedListStack* stk) {
 | 
				
			|||||||
    stk->stkSize = 0;
 | 
					    stk->stkSize = 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/* 获取栈的长度 */
 | 
					/* 获取栈的长度 */
 | 
				
			||||||
size_t size(LinkedListStack* stk) {
 | 
					int size(LinkedListStack* stk) {
 | 
				
			||||||
    assert(stk);
 | 
					    assert(stk);
 | 
				
			||||||
    return stk->stkSize;
 | 
					    return stk->stkSize;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -31,18 +31,17 @@ bool empty(LinkedListStack* stk) {
 | 
				
			|||||||
/* 访问栈顶元素 */
 | 
					/* 访问栈顶元素 */
 | 
				
			||||||
int top(LinkedListStack* stk) {
 | 
					int top(LinkedListStack* stk) {
 | 
				
			||||||
    assert(stk);
 | 
					    assert(stk);
 | 
				
			||||||
    if (size(stk) == 0 ) 
 | 
					    assert(size(stk) != 0); 
 | 
				
			||||||
        // 抛出异常
 | 
					 | 
				
			||||||
    return stk->stackTop->val;
 | 
					    return stk->stackTop->val;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/* 入栈 */
 | 
					/* 入栈 */
 | 
				
			||||||
void push(LinkedListStack* stk, int num) {
 | 
					void push(LinkedListStack* stk, int num) {
 | 
				
			||||||
    assert(stk);
 | 
					    assert(stk);
 | 
				
			||||||
    ListNode *node = (ListNode *)malloc(sizeof(ListNode));
 | 
					    ListNode *node = (ListNode *)malloc(sizeof(ListNode));
 | 
				
			||||||
    node->next = stk->stackTop;
 | 
					    node->next = stk->stackTop; // 更新新加结点指针域
 | 
				
			||||||
    node->val = num;
 | 
					    node->val = num;            // 更新新加结点数据域
 | 
				
			||||||
    stk->stackTop = node;
 | 
					    stk->stackTop = node;       // 更新栈顶
 | 
				
			||||||
    stk->stkSize++;
 | 
					    stk->stkSize++;             // 更新栈大小
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/* 出栈 */
 | 
					/* 出栈 */
 | 
				
			||||||
void pop(LinkedListStack* stk) {
 | 
					void pop(LinkedListStack* stk) {
 | 
				
			||||||
@ -60,6 +59,7 @@ void pop(LinkedListStack* stk) {
 | 
				
			|||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
    /* 初始化栈 */
 | 
					    /* 初始化栈 */
 | 
				
			||||||
    LinkedListStack stack;
 | 
					    LinkedListStack stack;
 | 
				
			||||||
 | 
					    constructor(&stack);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 元素入栈 */
 | 
					    /* 元素入栈 */
 | 
				
			||||||
    push(&stack, 1);
 | 
					    push(&stack, 1);
 | 
				
			||||||
@ -69,7 +69,7 @@ int main() {
 | 
				
			|||||||
    push(&stack, 4);
 | 
					    push(&stack, 4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    printf("栈 stack = ");
 | 
					    printf("栈 stack = ");
 | 
				
			||||||
    printStack(&stack);
 | 
					    printLinkedList(stack.stackTop);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 访问栈顶元素 */
 | 
					    /* 访问栈顶元素 */
 | 
				
			||||||
    int stackTop = top(&stack);
 | 
					    int stackTop = top(&stack);
 | 
				
			||||||
@ -78,15 +78,15 @@ int main() {
 | 
				
			|||||||
    /* 元素出栈 */
 | 
					    /* 元素出栈 */
 | 
				
			||||||
    pop(&stack);
 | 
					    pop(&stack);
 | 
				
			||||||
    printf("出栈元素 pop = %d, 出栈后 stack =  ", stackTop);
 | 
					    printf("出栈元素 pop = %d, 出栈后 stack =  ", stackTop);
 | 
				
			||||||
    printStack(&stack);
 | 
					    printLinkedList(stack.stackTop);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 获取栈的长度 */
 | 
					    /* 获取栈的长度 */
 | 
				
			||||||
    size_t stackSize = size(&stack);
 | 
					    int stackSize = size(&stack);
 | 
				
			||||||
    printf("栈的长度 size = %ld\r\n", stackSize);
 | 
					    printf("栈的长度 size = %d\r\n", stackSize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 判断是否为空 */
 | 
					    /* 判断是否为空 */
 | 
				
			||||||
    bool isEmpty = empty(&stack);
 | 
					    bool isEmpty = empty(&stack);
 | 
				
			||||||
    printf("栈是否为空 = %d", isEmpty);
 | 
					    printf("栈是否为空 = %s\r\n", isEmpty ? "yes" : "no");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -127,14 +127,6 @@ static void printTree(TreeNode *root) {
 | 
				
			|||||||
    printTreeHelper(root, NULL, false);
 | 
					    printTreeHelper(root, NULL, false);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * @brief Print a stack
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @param head
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static void printStack(void *stack) {
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user