首页 > 代码库 > 数据结构,到底如何用中学,学中用?
数据结构,到底如何用中学,学中用?
说真的,上大学时数据结构老师每上完一次课,自己都需要花好长时间来理解,但理解好多次还是迷惑;现在工作了好多年做.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 else53 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 else75 { 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 else90 {91 s->top=s->top-1;92 chE=s->ch[s->top]; 93 pFlag=0;94 }95 return pFlag;96 }
经过了以上练习后,明白栈的工作原理,调用其方法就简单了。
数据结构,到底如何用中学,学中用?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。