数据结构:栈 关键代码解读

#define ERROR 0
#define OK 1
typedef int status;
#define INITSIZE 1
#define INCREMENT 1
typedef int elemType;
typedef struct stack {
 elemType* top;//指向栈顶,下一个插入元素的位置,判空条件:top==base
 elemType* base;//指向栈底,若未分配空间,为NULL,判定栈存在条件
 int stacksize;//记录目前分配的栈的大小,分配内存
}sqStack;//顺序存储结构的栈
status initStack(sqStack& s)//初始化
{
 s.base = (elemType*)malloc(sizeof(elemType) * INITSIZE);//给栈分配初始内存
 if (s.base == NULL)//分配失败
  return ERROR;
 s.top = s.base;//栈顶指向栈底位置
 s.stacksize = INITSIZE;//更新分配大小
 return OK;
}
status Push(sqStack& s,elemType e)//从栈顶加入元素e
{
 if (s.base == NULL)//栈不存在
 {
  return ERROR;
 }
 if (s.top - s.base >= s.stacksize - 1)//栈满
 {
  elemType* newbase;
  newbase = (elemType*)realloc(s.base, sizeof(elemType) * (s.stacksize + INCREMENT));//重新分配空间,且将原栈空间中的内容保留
  if (newbase == NULL)//分配失败
   return ERROR;
  s.top = newbase + (s.top - s.base);//栈顶指向新分配空间所对应的栈顶
  s.base = newbase;//栈底为新栈底
  s.stacksize += INCREMENT;//更新分配空间大小
 }
 *s.top++ = e;//将新元素加入,且栈顶指针向上移位
 return OK;
}
status Pop(sqStack& s, elemType& e)//取出栈顶元素
{
 if (s.base==NULL)//栈不存在
 {
  return ERROR;
 }
 if (s.base == s.top)//栈空
  return ERROR;
 e = *--s.top;//取出元素,且栈顶指针向下移位
 return OK;
}

应用

转换数制

int main(void)
{
 sqStack s1;
 elemType e;
 int n, t;
 initStack(s1);
 while (Input(n, t))
 {
  while (n / t)
  {
   Push(s1, n % t);
   n = n / t;
  }
  Push(s1, n);
  while (Pop(s1, e))
   cout << e;
  cout << endl;
 } 
 return 0;
}
int Input(int& n, int& t)
{
 char s[100];
 cout << "go on?(q to quit)" << endl;
 cin >> s;
 if (*s == 'q')
  return 0;
 cout << "which number to transfer:";
 cin >> n;
 cout << "in which form?";
 cin >> t;
 return 1;
}

结果展示
运行截图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
重要意义   一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。   在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。   选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。 编辑本段研究内容   在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。   “数据结构”作为一门独立的课程在国外是从1968年才开始设立的。 1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。“数据结构”在计算机科学中是一门综合性的专业基础课。数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构这一门课的内容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。   计算机是一门研究用计算机进行信息表示和处理的科学。这里面涉及到两个问题:信息的表示,信息的处理 。   而信息的表示和组织又直接关系到处理信息的程序的效率。随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系统程序和应用程序的规模很大,结构又相当复杂。因此,为了编写出一个“好”的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。众所周知,计算机的程序是对信息进行加工处理。在大多数情况下,这些信息并不是没有组织,信息(数据)之间往往具有重要的结构关系,这就是数据结构的内容。数据的结构,直接影响算法的选择和效率。   计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法(Algorithm),最后编出程序、进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。计算机算法与数据的结构密切相关,算法无不依附于具体的数据结构数据结构直接关系到算法的选择和效率。运算是由计算机来完成,这就要设计相应的插入、删除和修改的算法 。也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。   数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。   数据元素是数据的基本单位,在计算机程序中通常作为一个整体考虑。一个数据元素由若干个数据项组成。数据项是数据的不可分割的最小单位。有两类数据元素:一类是不可分割的原子型数据元素,如:整数"5",字符 "N" 等;另一类是由多个款项构成的数据元素,其中每个款项被称为一个数据项。例如描述一个学生的信息的数据元素可由下列6个数据项组成。其中的出生日期又可以由三个数据项:"年"、"月"和"日"组成,则称"出生日期"为组合项,而其它不可分割的数据项为原子项。   关键字指的是能识别一个或多个数据元素的数据项。若能起唯一识别作用,则称之为 "主" 关键字,否则称之为 "次" 关键字。   数据对象是性质相同的数据元素的集合,是数据的一个子集。数据对象可以是有限的,也可以是无限的。   数据处理是指对数据进行查找、插入、删除、合并、排序、统计以及简单计算等的操作过程。在早期,计算机主要用于科学和工程计算,进入八十年代以后,计算机主要用于数据处理。据有关统计资料表明,现在计算机用于数据处理的时间比例达到80%以上,随着时间的推移和计算机应用的进一步普及,计算机用于数据处理的时间比例必将进一步增大。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值