目录

  • 1 第一章 绪论
  • 2 第二章 线性表
    • 2.1 单链表的案例讲解——学生信息管理系统
  • 3 第三章 栈和队列
    • 3.1 顺序栈的代码
    • 3.2 链栈的代码
    • 3.3 栈的案例源代码
    • 3.4 顺序队列的代码
    • 3.5 链队的代码
  • 4 串、数组、广义表
    • 4.1 顺序串的源代码
    • 4.2 链串的源代码
    • 4.3 串部分的课件
    • 4.4 数组部分的课件
    • 4.5 广义表的课件
  • 5 树与二叉树
    • 5.1 二叉链表法存储树代码与课件
  • 6 图
    • 6.1 图的课件
    • 6.2 图的相关源代码
  • 7 查找
    • 7.1 查找的课件
    • 7.2 查找的相关源代码
链栈的代码


 #include "stdio.h"
 #include "stdlib.h"
 typedef int ElemType;
typedef struct LNode
{     ElemType data; //数据域
    struct LNode *next; //指针域
}LinkNode,*LinkStack;

bool InitStack(LinkStack &s)
{
s=(LinkNode *)malloc(sizeof(LinkNode));
s->next=NULL;
return 1;

}

void DestroyStack(LinkStack &s)
{     LinkStack p=s,q=s->next;
    while (q!=NULL)
    {     free(p);
        p=q;
        q=p->next;
    }
    free(p); //此时p指向尾节点,释放其空间
}

int StackEmpty(LinkStack s)
{
    if(s->next==NULL)
        return 1;
    else
        return 0;
}

void Push(LinkStack &s,ElemType e)
{     LinkStack p;
    p=(LinkNode *)malloc(sizeof(LinkNode));
    p->data=e; //新建元素e对应的节点p
    p->next=s->next; //插入p节点作为开始节点
    s->next=p;
}
int Pop(LinkStack &s,ElemType &e)
{     LinkStack p;
    if (s->next==NULL) //栈空的情况
        return 0;
    p=s->next; //p指向开始节点
    e=p->data;
    s->next=p->next; //删除*p节点
    free(p); //释放*p节点
    return 1;
}
int GetTop(LinkStack s,ElemType &e)
{     if (s->next==NULL) //栈空的情况
        return 0;
    e=s->next->data;
    return 1;
}

 int main()
 {
     
    LinkNode *S;
    InitStack(S);
    Push(S,'a');
    Push(S,'b');
    Push(S,'c');
    Push(S,'d');
    printf("栈为%s\n",StackEmpty(S)?"空":"非空");
    ElemType e;
    /*Pop(S,e);
    printf("%c出栈\n",e);
        Pop(S,e);
    printf("%c出栈\n",e);
        Pop(S,e);
    printf("%c出栈\n",e);
        Pop(S,e);
    printf("%c出栈\n",e); */
    while(!StackEmpty(S))
    {
        Pop(S,e);
        printf("%c出栈\n",e);
     }
    printf("栈为%s",StackEmpty(S)?"空":"非空");
 }