c单链表实现的栈结构

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值