栈的模拟(内核为链表).c
2017-03-13 20:53
309 查看
typedef struct Node{ int data; struct Node *pNext; }NODE_T, *PNODE_T; typedef struct Stack{ PNODE_T pTop; PNODE_T pBottom; }STACK_T, *PSTACK_T; void Init_Stack(PSTACK_T pStack); bool Push_Stack(PSTACK_T pStack, int val); bool Pop_Stack(PSTACK_T pStack, int *pVal); void Traverse_Stack(PSTACK_T pStack); void Clear_Stack(PSTACK_T pStack); int main(void) { STACK_T stack; int val; Init_Stack(&stack); Push_Stack(&stack, 53); Push_Stack(&stack, 158); Push_Stack(&stack, -34); Push_Stack(&stack, -12); Push_Stack(&stack, 8); Push_Stack(&stack, 68); Traverse_Stack(&stack); Clear_Stack(&stack); Traverse_Stack(&stack); //if(Pop_Stack(&stack, &val)){ //printf("Pop Stack Success!,val = %d\n", val); //} //if(Pop_Stack(&stack, &val)){ //printf("Pop Stack Success!,val = %d\n", val); //} //if(Pop_Stack(&stack, &val)){ //printf("Pop Stack Success!,val = %d\n", val); //} //Traverse_Stack(&stack); return 0; } void Init_Stack(PSTACK_T pStack) { pStack->pTop = (PNODE_T)MALLOC(NODE_T); if(NULL == pStack->pTop){ printf("Stack Create Fail!\n"); }else{ pStack->pBottom = pStack->pTop; pStack->pBottom->pNext = NULL; pStack->pBottom->data = 0; } } bool Push_Stack(PSTACK_T pStack, int val) { PNODE_T pNew = (PNODE_T)MALLOC(NODE_T); if(NULL == pNew){ printf("Push Stack Fail!\n"); return false; }else{ pNew->data = val; pNew->pNext = pStack->pTop; pStack->pTop = pNew; return true; } } bool Is_Empty(PSTACK_T pStack) { if(pStack->pTop == pStack->pBottom) return true; else return false; } bool Pop_Stack(PSTACK_T pStack, int *pVal) { if( Is_Empty(pStack) ){ printf("Pop Stack Fail!\n"); return false; }else{ (*pVal) = pStack->pTop->data; pStack->pTop = pStack->pTop->pNext; return true; } } void Traverse_Stack(PSTACK_T pStack) { if( Is_Empty(pStack) ){ printf("stack is empty!\n"); }else{ PNODE_T p = pStack->pTop; while(p != pStack->pBottom) { printf("%xH: %d;\n", p,p->data); p = p->pNext; } } return; } void Clear_Stack(PSTACK_T pStack) { if( Is_Empty(pStack) ){ printf("stack is empty!\n"); }else{ PNODE_T p = pStack->pTop; while(p != pStack->pBottom) { FREE(p); p = p->pNext; } pStack->pTop = pStack->pBottom; } return; }
相关文章推荐
- Linux 内核 链表 的简单模拟(2)
- Linux 内核 链表 的简单模拟(1)
- Windows内核中使用List链表来模拟FIFO操作
- python 模拟链表
- 深入分析 Linux 内核链表 转
- 深入分析 Linux 内核链表
- 深入分析 Linux 内核链表
- linux 内核链表操作头文件list.h
- Linux设备驱动工程师之路——内核链表的使用
- HDU 6215 Brute Force Sorting 链表 + 队列(模拟)
- HDU 6215 2017Brute Force Sorting 青岛网络赛 队列加链表模拟
- L2-002. 链表去重---模拟
- 写个内核链表,练习练习
- 内核中的链表list_head
- 深入分析 Linux 内核链表
- 深入分析 Linux 内核链表
- java模拟---遍历链表
- JAVA----关于数组模拟链表的练习总结
- Java模拟单向链表和双向链表的实现
- csu 1329 一行盒子(数组模拟链表)