链栈的相关操作

  1 /*

  2 2012年11月23日9:10:12

  3 链栈的基本操作 

  4 InitStack    初始化链栈

  5 */

  6 

  7 

  8 #include<stdio.h>

  9 #include<stdlib.h>

 10 

 11 

 12 

 13 //////////定义结构体//////////////////

 14 typedef struct Node

 15 {

 16     struct Node *pNext;

 17     int data;

 18 }NODE,*PNODE;

 19 

 20 typedef struct Stack            

 21 {

 22     PNODE pTop;                 

 23     int count;     

 24 }LinkStack,*PLinkStack;

 25 

 26 

 27 

 28 ////////////函数声明//////////////////////

 29 void InitStack(PLinkStack);

 30 void Push(int val,PLinkStack pS);

 31 void Traverse(PLinkStack pS);

 32 void Pop(PLinkStack pS);

 33 

 34 

 35 /////////////主函数///////////////////

 36 int main(void)

 37 {

 38     LinkStack S;

 39     InitStack(&S);

 40     Push(3,&S);

 41     Push(2,&S);

 42     Push(4,&S);

 43     Push(5,&S);

 44     Traverse(&S);

 45     Pop(&S);

 46     Traverse(&S);

 47     return 0;

 48 }

 49 

 50 

 51 

 52 ///////////初始化链栈//////////////////

 53 void InitStack(PLinkStack pS)

 54 {

 55     

 56     pS->pTop = (PNODE)malloc(sizeof(NODE));

 57     if(NULL == pS->pTop)

 58     {

 59         printf("分配内存失败\n");

 60         exit(-1);

 61     }

 62     else

 63     {

 64         pS->pTop->pNext = NULL;

 65         pS->count = 0;

 66     }

 67 }

 68 

 69 

 70 

 71 ////////////入栈///////////////

 72 void Push(int val,PLinkStack pS)

 73 {

 74     PNODE pNew;

 75     pNew = (PNODE)malloc(sizeof(NODE));

 76     if(NULL == pNew)

 77     {

 78         printf("分配内存失败\n");

 79         exit(-1);

 80     }

 81     else 

 82     {

 83         pNew->data= val;

 84         pNew->pNext = pS->pTop;

 85         pS->pTop = pNew;

 86         pS->count++;

 87     }

 88 }

 89 

 90 

 91 ///////////遍历输出////////////////

 92 void Traverse(PLinkStack pS)

 93 {

 94     PNODE pTemp = pS->pTop;

 95     if(NULL == pTemp->pNext)

 96     {

 97         printf("空栈!\n");

 98     }

 99     else

100     {

101         while(NULL!=pTemp->pNext)

102         {

103             printf("%d\n",pTemp->data);

104             pTemp = pTemp->pNext;

105         }

106     }

107     return;

108 }

109 

110 

111 ////////////出栈////////////////////

112 void Pop(PLinkStack pS)

113 {

114     PNODE pTemp = pS->pTop;

115     if(NULL == pTemp->pNext)

116     {

117         printf("空栈!\n");

118     }

119     else

120     {

121         printf("出栈元素为%d\n",pTemp->data);

122         pS->pTop = pS->pTop->pNext;

123         free(pTemp);

124         pS->count--;

125         

126     }

127     

128     

129 }

 

你可能感兴趣的:(操作)