链栈的相关操作

复制代码
  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 }
复制代码

 

posted @   木有Some  阅读(279)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
点击右上角即可分享
微信分享提示