#include <stdio.h>
#include <stdlib.h> typedef int ElemType; typedef struct StackNode{
ElemType data;
struct StackNode *next;
}StackNode; StackNode *InitStack(StackNode *S);//初始化
StackNode * DestroyStack(StackNode*S);//销毁
void ClearStack(StackNode*S);//清空
int StackEmpty(StackNode*S);//判空
int StackLength(StackNode*S);//栈长度
ElemType GetTop(StackNode*S);//获取栈顶元素,不修改指针位置
StackNode *Push(StackNode*S, ElemType e);//插入栈顶
StackNode *Pop(StackNode *S, ElemType *e);//删除栈顶
void StackTraverse(StackNode *S);//从栈顶依次遍历 //初始化
StackNode *InitStack(StackNode *S){
S = NULL;
printf("初始化成功\n");
return S;
} //销毁,返回空指针给S
StackNode *DestroyStack(StackNode*S){
StackNode *p = S->next;
while(p){
free(S);
S = p;
p = p->next;
}
printf("销毁成功\n");
return NULL;
} //清空
void ClearStack(StackNode*S){
printf("清空\n");
StackNode *p = S;
while(p!=NULL){
p->data = ;
p = p->next;
}
printf("清空成功\n");
} //判空
int StackEmpty(StackNode*S); //栈长度
int StackLength(StackNode*S){
int len = ;
StackNode *p = S;
while(p!=NULL){
len++;
p = p->next;
}
return len;
} //获取栈顶元素,不修改指针位置
ElemType GetTop(StackNode*S){
if(S!=NULL){
printf("栈顶元素为%d", S->data);
return S->data;
}else{
printf("空链栈无栈顶元素\n");
return NULL;
}
} //插入栈顶,返回指针指向当前栈顶
StackNode *Push(StackNode*S, ElemType e){
StackNode *p = NULL;
p = (StackNode *)malloc(sizeof(StackNode));
p->data = e;
p->next = S;
S = p;
printf("%d入栈成功\n", e);
return S;
} //删除栈顶,返回指针指向当前栈顶
StackNode *Pop(StackNode *S, ElemType *e){
StackNode *p = NULL;//用于暂存删除元素
if(S == NULL){
printf("空链栈,删除失败\n");
return NULL;
}
*e = S->data;
p = S;
S = S->next;
free(p);
printf("%d出栈成功\n",*e);
return S;
} //从栈顶依次遍历
void StackTraverse(StackNode *S){
StackNode *p = S;
if(p == NULL){
printf("空链栈\n");
return;
}
while(p != NULL){
printf("%d ", p->data);
p = p->next;
}
printf("\n");
} int main(void){
StackNode *S;
ElemType e;
//初始化测试
S = InitStack(S); // //获取栈顶元素测试
// GetTop(S);
// S = Push(S, 999);
// GetTop(S); //入栈测试
S = Push(S, );
S = Push(S, );
S = Push(S, );
S = Push(S, );
S = Push(S, ); //栈长测试
printf("栈长%d\n",StackLength(S)); //遍历测试
StackTraverse(S); // //出栈测试
// S = Pop(S, &e);
// S = Pop(S, &e);
// S = Pop(S, &e);
// //printf("测试e是否改变: %d\n",e);
// S = Pop(S, &e);
// StackTraverse(S); // //清空测试
// ClearStack(S);
// StackTraverse(S); //// //销毁测试
// S = DestroyStack(S);
// StackTraverse(S); return ;
}

最新文章

  1. tp中使用分页技术
  2. NOIP2012国王游戏
  3. Csharp日常笔记
  4. Nuget
  5. CSS+DIV之强化background属性
  6. 个人Python常用Package及其安装
  7. C++中的cout输出机制
  8. rebase
  9. JDBC第一篇--【介绍JDBC、使用JDBC连接数据库、简单的工具类】
  10. web版的tty
  11. np.random.shuffle(x)的用法
  12. Bean method &#39;jdbcTemplate&#39; not loaded because @ConditionalOnSingleCandidate
  13. 团队-爬虫豆瓣top250项目-模块测试过程
  14. POJ1742Coins(多重背包)
  15. 2017-2018-2 20165236 实验四《Android开发基础》实验报告
  16. 《DSP using MATLAB》Problem5.16
  17. js教程
  18. nat 类型及打洞原理
  19. 【算法34】蓄水池抽样算法 (Reservoir Sampling Algorithm)
  20. Vuejs入门级简单实例

热门文章

  1. MD5 加密工具类MD5Util
  2. 仓库管理移动应用解决方案&mdash;&mdash;C#开发的移动应用开源解决方案
  3. 一次Ubuntu16系统的找回root密码的过程
  4. 复习一下KVC
  5. ABP进阶教程11 - 小结
  6. nRF24L01+不能接收或接收偶尔异常等问题实战分享
  7. [转]RHEL7上配置NFS服务
  8. yum工具及源码包
  9. python生产者和消费者模式实现(三)进程池方式
  10. **目录找出最后一次修改的文件(html结果),发送报告到指定qq邮箱