栈的链表实现

原创 2013年12月04日 00:11:30

stack1.h

#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED

typedef  int  ElementType;

struct  node;
typedef  struct node *PtrToNode;
typedef  PtrToNode  Stack;

int  IsEmpty(Stack  S);
Stack  CreatStack(void);
void   MakeEmpty(Stack S);
Stack   Push(ElementType  X, Stack S);
Stack   Pop( Stack  S);
ElementType Top(Stack S);

#endif // STACK_H_INCLUDED

stack1.c

#include  <stdio.h>
#include  <malloc.h>
#include  "stack1.h"

struct  node
{
    ElementType  data;
    PtrToNode  next;
};


int  IsEmpty(Stack  S)
{
    return  S->next ==NULL;
}
Stack  CreatStack(void)
{
    Stack S=(Stack)malloc(sizeof(struct node));
    if(S==NULL)
        printf("out  of  space!!!");

    S->next=NULL;
    MakeEmpty(S);
    return  S;
}

void   MakeEmpty(Stack S)
{
    if(S==NULL)
        printf("error!!!");
    else
        while(!IsEmpty(S))
           S=Pop(S);
}


Stack   Push(ElementType  X, Stack S)
{
    Stack temp;
    temp=(Stack)malloc(sizeof(struct node));
    temp->data=X;
    temp->next=S->next;
    S->next=temp;

    return  S;
}


Stack   Pop(Stack  S)
{
    Stack temp;
    temp=S->next;
    S->next=S->next->next;
    free(temp);

    return S;
}


ElementType Top(Stack S)
{
    if(!IsEmpty(S))
        return  S->next->data;
    else
            return  0;
}





main.c

#include <stdio.h>
#include <stdlib.h>
#include  "stack1.c"

int main()
{
    Stack  S;
    ElementType  c;
    S=(Stack)malloc(sizeof(struct node));

    S=CreatStack();
    while((c=getchar())!= EOF)
        S=Push(c,S);

    while(!IsEmpty(S))
    {
        if(Top(S)!='\n')
              printf("%d \t",Top(S));
         else
                printf("  ");
        S=Pop(S);
    }

    getchar();

    return 0;
}


C语言 实现 链表栈

LinkStack.h 头文件声明如下: #include typedef int DataType; //自定义数据类型,假定为整型 struct Node; ...
  • lutinghuan
  • lutinghuan
  • 2012年04月18日 20:12
  • 11245

基于链表的栈实现(c++)

#ifndef _STACK#define _STACK#include //节点类template class Node{ public: T data; Node * next; };//栈...
  • ericming200409
  • ericming200409
  • 2010年04月26日 20:13
  • 1615

栈的链表实现(C语言)

源码文件地址 :http://download.csdn.net/detail/mcu_tian/9530628 由前面:http://blog.csdn.net/mcu_tian/article/d...
  • mcu_tian
  • mcu_tian
  • 2016年05月25日 11:46
  • 1934

C语言实现栈(基于链表)

栈的底层数据结构可以是数组,也可以是链表,用链表实现栈,理论上是无限大的 下面是链栈的实现代码 #include #include typedef int datatype; //Link St...
  • weixin_36040034
  • weixin_36040034
  • 2016年11月26日 23:00
  • 2032

用链表实现栈(Java版)

用链表实现栈 一、算法的思想 用链表实现栈的先进后出,实现栈的push,pop,peak方法。主要就是利用链表的头结点作为栈顶的元素。 1.当要push的时候,相当于新new一个头结点,然后让新...
  • ly969434341
  • ly969434341
  • 2016年05月23日 21:46
  • 2485

基于数组和链表两种方式实现栈

栈是一种先进后出的数据结构,在实际编程栈有很广泛的用处,Java栈已经帮我们实现好了stack类。 实现栈的两种方式,基于数组实现和基于链表实现。 1.stack接口 public interfa...
  • u012922219
  • u012922219
  • 2016年09月22日 17:06
  • 619

链表堆栈C实现

链表堆栈的C实现
  • qq_29183809
  • qq_29183809
  • 2015年11月24日 19:24
  • 452

分别用数组和链表实现栈

1,堆栈ADT package Stack;public interface StackADT { public void push(Object element);//压栈 ...
  • mengzhejin
  • mengzhejin
  • 2014年07月15日 18:20
  • 972

两种栈的实现--顺序栈和链表栈

  • Alfa_
  • Alfa_
  • 2016年12月19日 11:19
  • 2079

利用单链表实现栈

栈是一种仅限于在头尾操作的数据结构,和队列相反,栈的特点是“现金后出”,因此又称为LIFO。和队列一样,栈也有链表和数组两种实现方式,各自的优缺点和介绍队列时提到的基本相同。以下介绍使用链表实现栈的方...
  • keheinash
  • keheinash
  • 2016年04月15日 18:40
  • 1828
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:栈的链表实现
举报原因:
原因补充:

(最多只允许输入30个字)