链栈
1 #include<stdio.h> 2 #include<malloc.h> 3 #include<stdlib.h> 4 5 typedef struct Node 6 { 7 int data; 8 struct Node * pNext; 9 }NODE, *PNODE; 10 11 typedef struct Stack 12 { 13 PNODE pTop; //top指针 14 PNODE pBottom; //bottom指针 15 }STACK, *PSTACK; 16 17 void init(PSTACK); 18 void push(PSTACK,int); 19 void traverse(PSTACK); 20 bool is_empty(PSTACK); 21 bool pop(PSTACK,int*); 22 void clear(PSTACK); 23 24 int main() 25 { 26 STACK S; //STACK 等价于struct Stack 27 int val; 28 29 init(&S); //目的是造出一个空栈 30 printf("入栈元素是"); 31 push(&S,1); //压栈 32 push(&S,2); 33 push(&S,3); 34 push(&S,4); 35 push(&S,5); 36 traverse(&S); //遍历输出 37 38 if( pop(&S,&val) ) 39 { 40 printf("出栈成功,出栈的元素是%d ",val); 41 } 42 else 43 { 44 printf("出栈失败!\n"); 45 } 46 traverse(&S); //遍历输出 47 48 clear(&S); 49 traverse(&S); 50 return 0; 51 } 52 53 void init(PSTACK pS) 54 { 55 pS->pTop = (PNODE)malloc(sizeof(NODE)); 56 if(NULL == pS->pTop) 57 { 58 printf("动态内存分配失败"); 59 exit(-1); 60 } 61 else 62 { 63 pS->pBottom = pS->pTop; 64 pS->pTop->pNext = NULL; //pS->Bottom->pNext = NULL; 65 } 66 } 67 68 void push(PSTACK pS,int val) 69 { 70 PNODE pNew = (PNODE)malloc(sizeof(NODE)); 71 72 pNew->data = val; 73 pNew->pNext = pS->pTop; //pS->ptop能改成pS->pBottom 74 pS->pTop = pNew; 75 return; 76 } 77 78 void traverse(PSTACK pS) 79 { 80 PNODE p = pS->pTop; 81 82 while(p != pS->pBottom) 83 { 84 printf("%d ",p->data); 85 p = p->pNext; 86 } 87 printf("\n"); 88 return; 89 } 90 91 bool is_empty(PSTACK pS) 92 { 93 if(pS->pTop == pS->pBottom) 94 return true; 95 else 96 return false; 97 } 98 99 bool pop(PSTACK pS,int *pVal) 100 { 101 if( is_empty(pS) ) 102 { 103 return false; 104 } 105 else 106 { 107 PNODE r = pS->pTop; 108 *pVal = r->data; 109 pS->pTop = r->pNext; 110 free(r); 111 r = NULL; 112 return true; 113 } 114 } 115 116 void clear(PSTACK pS) 117 { 118 if( is_empty(pS) ) 119 { 120 return; 121 } 122 else 123 { 124 PNODE p = pS->pTop; 125 PNODE q = NULL; 126 127 while(p != pS->pBottom) 128 { 129 q = p->pNext; 130 free(p); 131 p = q; 132 } 133 pS->pTop = pS->pBottom; 134 } 135 return; 136 }
来源:https://www.cnblogs.com/aipeicai/p/12208888.html