数据结构,到底如何用中学,学中用?

说真的,上大学时数据结构老师每上完一次课,自己都需要花好长时间来理解,但理解好多次还是迷惑;现在工作了好多年做.net(C#)开发,经常用到数据结构方面的知识,就不停地翻看、用中体会总结,才明白数据结构的作用,及如何学好。

疑惑:

数据结构是比较抽象,而且书中给出好多伪代码,虽然老师一再讲的很卖力,我还是只能勉强明白,至于如何就在电脑上实现了,看到真真的执行结果呢,实际项目中又如何用呢?

项目中:.net开发项目(如vs2012中)中,用到栈时,按F1帮助文档,出来stack类的属性、方法等(按理说,微软已帮你实现了功能,你只需要调用就可以了,但是有时项目中的功能实现了,下次碰到类似的功能,心里还是不明白,弄不通就没法变通,那怎办?    下面将以顺序栈的实现来理解栈)

学习方法:下面将演示如何实现顺序栈的实现

实现:工具vc6.0,c语言

示例: 顺序栈的实现 (入栈、出栈操作,涉及到栈空、栈满的操作)

分析:栈是仅在表尾进行插入或删除操作的线性表。(表尾操作:称为栈顶

顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。

思路:(用语言写出自己的思路很重要,不要认为书上已经写了,那是编书作者的思路,不是你的;我是明白了原理后,自己写出来的主函数执行流程(如下图)


实现代码:(C语言实现的)

 1 //*自己写的
 2   顺序栈:用数组实现
 3 */
 4 #include <stdio.h>
 5 #include <string.h>
 6 #define MaxNum 5
 7 char chE;
 8
 9 typedef struct stack{
10     int top;
11     int base;
12     char ch[MaxNum];
13 }stack;
14
15
16 void iniStack(stack *s);
17 int  push(stack *s,char chE);   //返回入栈 标志
18 int pop(stack *s);
19
20 void main()
21 {
22     int i=0,inFlag,outFlag,j;
23     char chArr[MaxNum];
24     stack s;
25     printf("用数组实现顺序栈\n");
26     iniStack(&s);
27
28     printf("按1进行入栈操作\n");
29     printf("按2进行出栈操作\n");
30     printf("按3结束,请选择操作\n");
31     scanf("%d",&i);
32     while(i!=3)
33     {
34        switch(i)
35        {
36          case 1:
37              {
38               printf("请输入入栈元素\n");
39               gets(chArr);
40               for(j=0;j<strlen(chArr);j++)
41               {
42                   inFlag=push(&s,chArr[j]);
43                   if(inFlag==1)   printf("栈已满\n");
44               }
45               break;
46              }
47         case 2:
48             {
49              outFlag=pop(&s);
50              if(outFlag==1)
51                 printf("栈已空\n");
52              else
53                 printf("出栈元素为%c\n",chE);
54              break;
55             }
56        }
57        printf("按3结束,请选择操作\n");
58        scanf("%d",&i);
59     }
60 }
61
62 void iniStack(stack *s)
63 {
64     s->top=0;       //base top指向相同的起始位置
65     s->base=0;
66 }
67 int  push(stack *s,char chE)
68 {
69     int flag;
70     if(s->top >= MaxNum)
71     {
72         flag=1;
73     }
74     else
75     {
76         s->ch[s->top]=chE;
77         s->top=s->top+1;    //top指向栈顶元素的下一个位置
78         flag=0;
79     }
80     return flag;
81 }
82 int pop(stack *s)
83 {
84    int pFlag;
85    if(s->top==s->base)
86    {
87       pFlag=1;
88    }
89    else
90    {
91        s->top=s->top-1;
92        chE=s->ch[s->top];
93        pFlag=0;
94    }
95    return pFlag;
96 }

经过了以上练习后,明白栈的工作原理,调用其方法就简单了。

时间: 2024-12-15 08:14:10

数据结构,到底如何用中学,学中用?的相关文章

VR全景到底有何用?

VR全景到底有啥用?其实也面临着"悬浮滑板不悬浮"窘境-不论是GooglCardboard还是SamsungGearVR都没有做到真正意义上的虚拟现实.然而为什么现在有这么多的产品打着VR旗号接受市场的吹捧?小编认为媒体.搜索引擎(比方Googl相关科技公司的市场宣传都应该负起这个责任.悬浮滑板这个概念已经提出很多年了但是至今还没有一台真正意义上的悬浮滑板问世.最近大热的VR技术. 但似乎所有人都已经接受了这个称谓,尽管现在VR技术并不是真正意义上的虚拟现实.并且对它慢慢习以为常.现在

学数据结构,是不是一定要先学离散数学

[问题的来源] 有<数据结构基础>网络课程的学员给我提问: 哈夫曼树是不是都是双分支,没有单分支的?有点不太懂这个哈夫曼树的构造过程,为什么要这样构造?只知道这样会让权值大的叶节点靠近根节点,小的叶节点远离根节点,为什么权值可以相加再比较呢? 我的答复是: 所有叶节点,都是原给定的节点:所有分支节点,度均为2,所以没有单分支. 很高兴看到你能提出这么多的为什么,然而在数据结构这门课程中,更注重是什么,怎么做的问题,也只能讲到这个层面了,为什么的事情,建议找"离散数学"教材,

小白学 Python(13):基础数据结构(字典)(下)

人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变量基础操作 小白学 Python(5):基础运算符(上) 小白学 Python(6):基础运算符(下) 小白学 Python(7):基础流程控制(上) 小白学 Python(8):基础流程控制(下) 小白学 Python(9):基础数据结构(列表)(上) 小白学 Python(10):基础数据结构(

20172310 2017-2018-2 《程序设计与数据结构》第五周学习总结

20172310 <程序设计与数据结构>第五周学习总结 教材学习内容总结 总的来说,五.六两章主要是学习了条件判断和循环 条件语句和循环语句可以改变语句执行顺序(控制流) 相等性运算符有:== (等于) !=(不等于) <(小于) >(大于)<=(小于等于)>=(大于等于) 关系运算符(也就是逻辑关系):! (非)&&(与) ||(或) 条件判断语句主要有if语句.if-else语句(第五章)和switch语句(第六章) if语句.if-else语句的产

读数据结构(C语言版)

数据:数据是对现实世界物质的符号表示,在计算机中的意思是能输入到计算机中进行计算处理的符号为数据:是客观世界在计算机中的表示方式,是程序加工的原材料.数据可以是声音,图片,文档 数据元素:组成数据的基本构成单位,通常以结构化的形式出现,比如一本书的书目信息,包含作者,书名,出版刊号,出版社这些数据项,数据项是组成数据元素不可在分割的最小单位了. 数据对象:是具有相同结构的数据元素的集合,是数据的子集,相当于集合的概念: 数据结构:描述的是数据元素之间关系的事情,我们把这种数据元素之间关系称之为结

数据结构——栈——寻找下一个较大元素

题目描述 给出一个数组,向右寻找每一个元素的下一个较大的元素,没有更大的则为-1 举例 {4,6,1,3,2,5} 则求得的答案应为 {6,-1,3,5,5,-1} 题目分析 首先对于这样的题目,我们总是先想到最简单的,那么就是枚举,每次循环一个元素,不停的向右找就可以了.时间复杂度应该是n^2 但是这样肯定是不够用的. 然后我们考虑,这道题我们实际上遇到的问题是什么? 其实简单的说,这道题的意思是,在变化的数组中找到下一个较大的值. 难点在于,数组元素的变化,以及不是找最大值,而是找下一个较大

erp管理系统学习到底值几个钱?

ERP管理系统学习到底值几个钱呢?这可能经过我上面的一番说法之后,肯定会产生这样的想法,因为习得了这样的管理系统,该有多牛掰啊. 可是很遗憾,我会告诉你,这个ERP管理系统学习,绝对没有那么便宜,要是没有一点风险精神的话,我的建议只有一个:请绕道. 好的,剩下的继续看我演说下去,虽然我也没有多大的底气,但我脸皮厚(脸红). 一说到钱,大家可能会很高兴,那是当然,有钱的话,谁不想要?但是若果为了钱,而要先去付出一点代价呢?这就容易让人产生犹豫了,到底该不该学,学还是不学呢? 其实这些犹豫很多时候,

大一学生数据结构与算法的先后取舍

[来信] 在上学期,突然一天一位学长问我要选择哪个方向,指的是算法和一般的开发.我回答他算法,而他说我对语言学的太心急,太快,不像是喜欢算法的,并和我说算法玩玩就好,不要陷得太深,并建议我走一般开发的路子.虽然学长学的挺好,但就比我大一岁,我还是不太相信他说的.后来在学校acm实验室纳新时,我还是按捺加不住入了. 加入后,我开始对算法有了一点了解,并开始学习算法.本来我就是在我校oj上刷刷题.放假时借了本 <算法之道>,想在假期恶补一下,可是发现看不太懂.索性就不看了.因为acm实验室的题目在

初学者怎么学,个人见解

大家好,新手,一开始什么都不会,现在稍微一点点了解而已,还谈不上会. 感觉这语言特么的深奥,让人非常苦闷,枯燥,乏味,不过从中能摸出一点东西,本人是新手,不会说专业术语,所以都是大白话来说辞.不喜勿喷.喷者out. 我只是分享,不是求喷的.谢谢合作,彼此愉快.废话少说: 一开始的学习都是填鸭子式,没有任何的捷径,只能埋着头看,学,练,思,俗语:见招拆招.没有任何的问题时解决不了的.但是如果一些莫名其妙的问题,我想各位都能找出一点的问题所在,那么我的解决之道,不以理会.从其他的方面找出此案解决之道