来源:互联网 发布:license管理系统源码 编辑:程序博客网 时间:2024/06/05 16:10

本来想说,跟着看那个算法之路,但是发现数据结构与算法分析(C语言)并不是很好理解,其实它给的代码都是挺规范的,可能就是太规范了,所以不能直击要害,让人看着费解~~所以转向去听教程,浙大的数据结构教程还不错!


栈的数组实现

应该是栈的顺序存储结构,这个结构是由数组+栈顶元素变量实现的
定义栈的结构体

    typedef struct{        ElementType Data[MaxSize];//数组        int Top;//栈顶变量    }Stack;

typedef,不知道干嘛的?可能与Stack有关
ElementType,Data中存储的数据类型,可以是int,double,float…

程序基本都是照抄的,因为我不会呀!!!初次学都是这样,没必要感到难过,那个算法之路的大神不也是,不理解就一遍遍的纸上代码吗??但是每一遍都要努力去理解!

为啥非得用PtrS去访问?PtrS是这个stack结构体的指针,可以访问Top,Data变量
呵呵,Ptr – pointer 指针, 至于PtrS – pointer to Stack
向栈里面push元素,先检查栈是不是满了,Top
然后++Top,再向Data里面放元素!

push

    void Push(Stack *PtrS,ElementType item){        if (PtrS->Top==MaxSize-1){            printf("Error!The stack is full.");return;        }else{            PtrS->Data[++(PtrS->Top)]=item;            return;        }    }

pop

    ElementType Pop(Stack *PtrS){        if(PtrS->Top==-1){            printf("The Stack is empty");            return ERROR;        }else{            return PtrS->Data[(PtrS->Pop)--];//就是只能PtrS指针访问结构体!        }    }

只能PtrS指针访问结构体!不管是Data还是Top,都只能用PtrS指针访问!!!

习题,用一个数组实现两个栈!原理挺简单的
Top1,Top2的初始值不一样!
堆栈满的条件也不同!PtrS->Top2 – PtrS->Top1 == 1
还要区分对哪个堆栈操作!


栈的链表实现

定义声明链栈的结构体

    typedef struct Node{        ElementType  Data;        struct Node *Next;    }LinkStack;    LinkStack *Top;

CreateStack

    LinkStack *CreateStack(){ /* 构建一个堆栈的头结点,返回指针 */        LinkStack *S;        S = malloc( sizeof(struct Node));        S->Next = NULL;        return S;    }

IsEmpty

int IsEmpty( LinkStack *S ){    /*判断堆栈S是否为空,若为空函数返回整数1,否则返回0 */    return ( S->Next == NULL );}

push

void Push( ElementType item, LinkStack *S ){    /* 将元素item压入堆栈S */    struct Node *TmpCell;    TmpCell = malloc( sizeof( struct Node ) );    TmpCell->Element = item;    TmpCell->Next = S->Next;//不能理解!不能理解!不能理解!    S->Next = TmpCell;}

pop

ElementType Pop( LinkStack *S ){    /* 删除并返回堆栈S的栈顶元素 */    struct Node *FirstCell;    ElementType TopElem;    if( IsEmpty( S ) ) {        printf(“堆栈空”);         return NULL;    } else {        FirstCell = S->Next;//这就是栈顶S        S->Next = FirstCell->Next;//不能理解!不能理解!不能理解!        TopElem = FirstCell ->Element;        free(FirstCell);        return TopElem;    }}

发现了一个可以图解数据结构与算法的网站,还蛮有意思的VisuAlgo-visualising_algorithm

0 0