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");  
    }  

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

相关文章推荐

数据结构-java与c实现带头结点的单链表

题目:设顺序表va中的数据元素递增有序,试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。...

数据结构(C实现)------- 单链表

在单链表中,每一个结点包含两部分:存放每一个数据元素本身信息的数据域和存放其直接后继存储位置的指针域。        单链表结点的类型描述: typedef int ElemType; type...

数据结构---单链表c实现

#include #include #define NN 12 #define MM 20 typedef int elemType; struct sNode {  elemType...

C语言实现使用带头结点的单链表来构造栈结构

我在前面两篇博客中分别使用了静态数组、动态数组两种方式来构造栈,实现起来很方便,但总觉得灵活性还不够,因为无论怎样,我们都是要指定数组的长度。这篇博客中我们将会使用带头结点的单链表来模拟栈。为什么选用...

数据结构中单链表的实现

  • 2011年06月22日 01:20
  • 202KB
  • 下载

数据结构单链表的实现

  • 2013年11月26日 23:38
  • 5KB
  • 下载

数据结构栈--单链表实现

这次给大家介绍用单链表实现的栈。 如图   这里介绍双向链表的常用操作: l 创建栈 l 销毁栈 l 清空栈 l ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c单链表实现的栈结构
举报原因:
原因补充:

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