c单链表实现的栈结构

原创 2012年03月22日 10:07:39
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

struct Node{
        int value;
        struct Node *next;
};
typedef struct Node LStackNode;
typedef struct Node *LinkedStack;
LinkedStack LinkedStackInit(LinkedStack s){
        s=NULL;
	return s;
}

LinkedStack LinkedPush(LinkedStack s,int x){
        LStackNode *n;
        n=(LStackNode *)malloc(sizeof(LStackNode));
	if(!n) exit(-1);
        n->value=x;
        if(s==NULL){
        s=n;
        }else{
        n->next=s;
        s=n;
        }
        return s;
}
LinkedStack LinkedPop(LinkedStack s){
        if(s==NULL) exit(0);
        int r=s->value;
        printf("%d \t",r);
        LStackNode *t;
        t=s;
        s=s->next;
	free(t);
        return s;
}

void printfLStack(LinkedStack t){
        int i;
        i=0;
        while(t!=NULL){
                t=LinkedPop(t);
        }
}

void main(){
        int n;
        int m;
        printf("please input the number: \n");
        scanf("%d",&n);
        srand(time(NULL));
        LinkedStack Seven,Sodd;
        Seven=LinkedStackInit(Seven);
        Sodd=LinkedStackInit(Sodd);
        int i=0;
        for(i;i<n;i++){
                m=rand()%100;
                printf("%d \t",m);
                if(m%2==0){
                  Seven=LinkedPush(Seven,m);
                }else{
                  Sodd=LinkedPush(Sodd,m);
                }
        }
        printf("\n Seven num:\n");
        printfLStack(Seven);
        printf("\n Sodd num:\n");
        printfLStack(Sodd);
        printf("\n");
}

指针实现篇

    #include <stdlib.h>  
    #include <stdio.h>  
    #include <time.h>  
      
    struct Node{  
            int value;  
            struct Node *next;  
    };  
    typedef struct Node LStackNode;  
    typedef struct Node *LinkedStack;  
    LinkedStackInit(LinkedStack *s){  
            *s=NULL;  
    }  
      
    void LinkedPush(LinkedStack *s,int x){  
            LStackNode *n;  
            n=(LStackNode *)malloc(sizeof(LStackNode));  
            if(!n) exit(-1);  
            n->value=x;  
            if(*s==NULL){  
            *s=n;  
            }else{  
            n->next=*s;  
            *s=n;  
            }  
    }  
    void LinkedPop(LinkedStack *s){  
            if(*s==NULL) exit(0);  
            int r=(**s).value;  
            printf("%d \t",r);  
            LStackNode *t;  
	    t=*s;
	    *s=(**s).next;
    	    free(t);   
    }  
      
    void printfLStack(LinkedStack * t){  
            int i;  
            while(*t!=NULL){  
	       LinkedPop(t);  
	    }  
    }  
      
    void main(){  
            int n;  
            int m;  
            printf("please input the number: \n");  
            scanf("%d",&n);  
            srand(time(NULL));  
            LinkedStack Seven,Sodd;  
            LinkedStackInit(&Seven);  
            LinkedStackInit(&Sodd);  
            int i=0;  
            for(i;i<n;i++){  
                    m=rand()%100;  
                    printf("%d \t",m);  
                    if(m%2==0){  
                      LinkedPush(&Seven,m);  
                    }else{  
                      LinkedPush(&Sodd,m);  
                    }  
            }  
            printf("\n Seven num:\n");  
            printfLStack(&Seven);  
            printf("\n Sodd num:\n");  
            printfLStack(&Sodd);  
            printf("\n");  
    }  

本文涉及的结构体方面的知识可以参考

利用单链表实现栈

栈是一种仅限于在头尾操作的数据结构,和队列相反,栈的特点是“现金后出”,因此又称为LIFO。和队列一样,栈也有链表和数组两种实现方式,各自的优缺点和介绍队列时提到的基本相同。以下介绍使用链表实现栈的方...
  • keheinash
  • keheinash
  • 2016年04月15日 18:40
  • 1828

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

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

C语言单链表实现栈

#include #include typedef struct NODE { int val; struct NODE *next; }node;//define nodenode...
  • silence2015
  • silence2015
  • 2016年04月02日 23:21
  • 571

借助栈实现单链表逆置

 这是C语言标准版吧,不涉及C++中的&引用.代码:#include #include #include #define OK 1 #define ERROR 0 typ...
  • SunshineDabby
  • SunshineDabby
  • 2011年03月21日 23:07
  • 2857

C语言 实现 链表栈

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

栈的多种C语言实现

标题:栈的多种C语言实现 内容:栈是一种后进先出(LIFO)的数据结构,C语言中可以使用数组、全局变量、指针传参、引用传参等方法实现。 作者:MilkCu 概念 栈的定义 我们可以使用下面的结构体来定...
  • milkcu
  • milkcu
  • 2013年06月11日 18:14
  • 1695

用一个单链表L实现一个栈 要求PUSH和POP操作的时间仍为O(1) 算法导论10.2-2答案

#include #include #define NULL 0 typedef struct Stack *S1; typedef struct Node { int Element; No...
  • liubaoli1989
  • liubaoli1989
  • 2013年08月23日 19:41
  • 1704

栈-链式存储结构-c语言

/* 栈 链式存储结构实现 第一个结构体是每一个节点元素, 类似于链表 第二个结构体是用个指针top指向链表的尾部 */ #include #include #define...
  • u010187139
  • u010187139
  • 2015年06月28日 18:42
  • 1636

c语言之栈结构

1.什么是栈
  • ya_1249463314
  • ya_1249463314
  • 2017年02月20日 21:57
  • 3860

单链表实现一个栈

单链表实现的一个栈,只实现了栈的主要功能:push pop
  • nrj
  • nrj
  • 2014年10月12日 21:34
  • 1216
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c单链表实现的栈结构
举报原因:
原因补充:

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