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

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

 

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

 

 

       

 

posted @ 2016-11-20 11:32  水滴石穿2013  阅读(799)  评论(0编辑  收藏  举报