数据结构——链栈的基本操作实现(带头结点)

C语言实现链栈的初始化、进栈、出栈、取栈顶、判链栈空,遍历等基本操作(另外使用了C++中的引用知识,以便小白更好的入手)

//链栈的基本实现(带头结点)
#include 
#include 
typedef int Element;
//链栈的存储类型
typedef struct LinkNodeStack{
    //定义数据域
    Element data;
    //定义指针域
    struct LinkNodeStack *next;
}LinkedNodeStack,*LinkedStack;//这里LinkedNodeStack只想表示链栈结点,LinkedStack想表示栈链
//初始化链栈
bool InitLinkedStack(LinkedStack &S){
    S = (LinkedStack) malloc (sizeof (LinkedNodeStack));
    //判断链栈头结点内存是否申请成功
    if(!S){
        return false;
    }
    S->next = NULL;
    return true;
}
//链栈进栈
bool PushLinkedStack(LinkedStack &S,Element e){
    LinkedNodeStack *p;
    //为p结点分配内存
    p = (LinkedNodeStack*) malloc(sizeof (LinkedNodeStack));
    //判断p结点是否分配成功
    if(!p){
        return false;
    }
    //将e元素放入p结点中的数据域中
    p->data = e;
    //链栈栈顶元素链入新结点,p结点变成栈顶
    p->next = S->next;
    //p结点链入链栈头结点
    S->next = p;
    return true;
}
//链栈出栈
bool PopLinkedStack(LinkedStack &S,Element &e){
    //判断链栈空
    if(!S->next){
        return false;
    }
    //让p指针指针指向链栈顶
    LinkedNodeStack *p = S->next;
    //将链栈顶元素取出,放入e
    e = p->data;
    //让头结点指针跳过p结点,指向p结点的下一个结点
    S->next = p->next;
    //释放p结点内存
    free(p);
    return true;
}
//读取链栈顶元素
bool GetTopLinkedStack(LinkedStack S,Element &e){
    if(!S->next){
        return false;
    }
    //将头结点指向的第一个结点中的数据域取出
    e = S->next->data;
    return true;
}
//判链栈空
bool LinkedStackEmpty(LinkedStack S){
    if(S->next == NULL){
        printf("链栈为空!!!");
        return false;
    }else{
        printf("链栈不为空!!!");
        return true;
    }
}
//打印链栈元素
void PrintLinkedStack(LinkedStack S){
    //判断链栈空
    if(!S->next){
        return;
    }
    LinkedNodeStack *p = S->next;
    while(p){
        printf("%d ",p->data);
        p = p->next;
    }
    printf("\n");
}
//测试
int main(){
    LinkedStack s;
    Element e;
    InitLinkedStack(s);
    PushLinkedStack(s,23);
    PushLinkedStack(s,2);
    PushLinkedStack(s,14);
    PushLinkedStack(s,9);
    PopLinkedStack(s,e);
    printf("PopLinkedStack:%d\n",e);
    GetTopLinkedStack(s,e);
    printf("GetTopLinkedStack:%d\n",e);
    printf("PrintLinkedStack:");
    PrintLinkedStack(s);
    LinkedStackEmpty(s);
    return 0;
}


你可能感兴趣的:(数据结构,c语言,c++)