全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C语言数据结构之栈简单操作

C语言数据结构之栈简单操作

实验:

编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:

(1)初始化顺序栈
(2)插入元素
(3)删除栈顶元素
(4)取栈顶元素
(5)遍历顺序栈
(6)置空顺序栈

分析:

栈的顺序存储结构简称为顺序栈,它是运算受限的顺序表。

对于顺序栈,入栈时,首先判断栈是否为满,栈满的条件为:p->top= =MAXNUM-1,栈满时,不能入栈; 否则出现空间溢出,引起错误,这种现象称为上溢。

出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空作为一种控制转移的条件。

注意:

(1)顺序栈中元素用向量存放
(2)栈底位置是固定不变的,可设置在向量两端的任意一个端点
(3)栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示当前栈顶位置

顺序栈的实现:

#include <stdio.h> 
#include <malloc.h> 
 
typedef int SElemType; 
typedef int Status; 
#define INIT_SIZE 100 
#define STACKINCREMENT 10 
#define Ok 1 
#define Error 0 
#define True 1 
#define False 0 
typedef struct 
{ 
  SElemType *base; 
  SElemType *top; 
  int stacksize; 
}SqStack; 
 
//初始化栈 
Status InitStack(SqStack *s) 
{ 
  s->base = (SElemType *)malloc(INIT_SIZE * sizeof(SElemType)); 
  if(!s->base) 
  { 
    puts("存储空间分配失败!"); 
    return Error; 
  } 
  s->top = s->base; 
  s->stacksize = INIT_SIZE; 
  return Ok; 
} 
 
//清空栈 
Status ClearStack(SqStack *s) 
 { 
  s->top = s->base; 
  return Ok; 
 } 
 
//栈是否为空 
Status StackEmpty(SqStack *s) 
 { 
  if(s->top == s->base) 
   return True; 
  else 
   return False; 
 } 
 
//销毁栈 
Status Destroy(SqStack *s) 
{ 
  free(s->base); 
  s->base = NULL; 
  s->top = NULL; 
  s->stacksize=0; 
  return Ok; 
} 
 
//获得栈顶元素 
Status GetTop(SqStack *s, SElemType &e) 
{ 
  if(s->top == s->base) return Error; 
  e = *(s->top - 1); 
  return Ok; 
} 
 
//压栈 
Status Push(SqStack *s, SElemType e) 
{ 
  if(s->top - s->base >= s->stacksize)//栈满 
  { 
    s->base = (SElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(SElemType)); 
    if(!s->base) 
    { 
      puts("存储空间分配失败!"); 
      return Error; 
    } 
    s->top = s->base + s->stacksize;//修改栈顶位置 
    s->stacksize += STACKINCREMENT;//修改栈长度 
 
  } 
  *s->top++ = e; 
  return Ok; 
} 
 
//弹栈 
Status Pop(SqStack *s, SElemType *e) 
{ 
  if(s->top == s->base) return Error; 
  --s->top; 
  *e = *(s->top); 
  return Ok; 
} 
 
//遍历栈 
Status StackTraverse(SqStack *s,Status(*visit)(SElemType)) 
 { 
   SElemType *b = s->base;//此处不能直接用base或top移动,即不能改变原栈的结构 
   SElemType *t = s->top; 
  while(t > b) 
   visit(*b++); 
  printf("\n"); 
  return Ok; 
 } 
 
Status visit(SElemType c) 
 { 
  printf("%d ",c); 
  return Ok; 
 } 

测试代码:

int main() 
{ 
  SqStack a; 
  SqStack *s = &a; 
  SElemType e; 
  InitStack(s); 
  int n; 
  puts("请输入要进栈的个数:"); 
  scanf("%d", &n); 
  while(n--) 
  { 
    int m; 
    scanf("%d", &m); 
    Push(s, m); 
  } 
  StackTraverse(s, visit); 
  puts(""); 
  puts("8进栈后:"); 
  Push(s, 8); 
  StackTraverse(s, visit); 
  puts(""); 
  Pop(s, &e); 
  printf("出栈的元素是:%d\n", e); 
  printf("元素出栈后事实上并没有清除,依然存在于内存空间,所谓的出栈只是指针移动,出栈的元素是%d\n", *s->top);//判断出栈后元素是否还存在于内存中 
  Destroy(s); 
  return 0; 
} 

运行结果:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C语言数据结构之栈简单操作  # 数据结构  # 栈的实例  # C语言实现通用数据结构之通用椎栈  # C语言数据结构进阶之栈和队列的实现  # C语言编程数据结构栈与队列的全面讲解示例教程  # C语言编程数据结构的栈和队列  # C语言数据结构之使用链表模拟栈的实例  # C语言数据结构 栈的基础操作  # 详解C语言数据结构之栈  # 为空  # 遍历  # 上溢  # 主程序  # 它是  # 希望能  # 请输入  # 谢谢大家  # 在此基础上  # 清空  # 整型  # 事实上  # stdio  # malloc  # include  # lt  # define  # Status  # INIT_SIZE 


相关文章: 详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何在IIS中新建站点并配置端口与IP地址?  如何在香港服务器上快速搭建免备案网站?  h5在线制作网站电脑版下载,h5网页制作软件?  建站之星免费版是否永久可用?  招商网站制作流程,网站招商广告语?  威客平台建站流程解析:高效搭建教程与设计优化方案  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何快速上传建站程序避免常见错误?  简单实现Android验证码  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  如何选择适合PHP云建站的开源框架?  建站主机服务器选型指南与性能优化方案解析  常州自助建站工具推荐:低成本搭建与模板选择技巧  在线制作视频网站免费,都有哪些好的动漫网站?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  IOS倒计时设置UIButton标题title的抖动问题  jQuery 常见小例汇总  北京制作网站的公司,北京铁路集团官方网站?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  已有域名和空间如何搭建网站?  建站之星后台管理:高效配置与模板优化提升用户体验  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  如何选择网络建站服务器?高效建站必看指南  网站制作软件免费下载安装,有哪些免费下载的软件网站?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  如何在七牛云存储上搭建网站并设置自定义域名?  PHP正则匹配日期和时间(时间戳转换)的实例代码  实例解析Array和String方法  专业公司网站制作公司,用什么语言做企业网站比较好?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  表情包在线制作网站免费,表情包怎么弄?  如何在建站主机中优化服务器配置?  香港服务器租用每月最低只需15元?  如何基于云服务器快速搭建个人网站?  如何在IIS7上新建站点并设置安全权限?  c# await 一个已经完成的Task会发生什么  学校建站服务器如何选型才能满足性能需求?  建站主机CVM配置优化、SEO策略与性能提升指南  如何通过万网虚拟主机快速搭建网站?  建站之星如何助力企业快速打造五合一网站?  婚礼视频制作网站,学习*后期制作的网站有哪些?  大连网站制作公司哪家好一点,大连买房网站哪个好?  建站主机如何选?性能与价格怎样平衡?  建站之星多图banner生成与模板自定义指南  如何配置WinSCP新建站点的密钥验证步骤?  如何在建站之星绑定自定义域名? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。