首页 > 代码库 > 数据结构,到底如何用中学,学中用?

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

     说真的,上大学时数据结构老师每上完一次课,自己都需要花好长时间来理解,但理解好多次还是迷惑;现在工作了好多年做.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 }

 

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

 

 

       

 

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