zoukankan      html  css  js  c++  java
  • 数据结构----栈的链式存储结构源码

    数据结构----栈的链式存储结构源码

    在这里插入图片描述

    //  栈是仅限定在表尾进行插入和删除的操作的表;下面以栈的链式储存结构为例。
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct StackNode{
        int data;
        struct stacknode *next;
    }stacknode,*linkstackptr;
    
    typedef struct LinkStack{
        linkstackptr top;
        int cnt;
    }linkstack;
    
    int Initstack(linkstack *s)
    {
        s->top=(linkstackptr)malloc(sizeof(stacknode));
        if(!(s->top))
        return -1;
        s->top=NULL;
        s->cnt=0;
        return 1;
    }
    
    int push(linkstack *s,int val)
    {
        linkstackptr p=(linkstackptr)malloc(sizeof(stacknode));
        if(!p)
        return -1;
        p->data=val;
        p->next=s->top;
        s->top=p;
        s->cnt++;
        return 1;
    }
    
    int length(linkstack *s)
    {
        if(s->cnt==0)
        return 0;
        else
        return s->cnt;
    }
    int pop(linkstack *s)
    {
        linkstackptr p;
        if(length(s)==0)
        return -1;
        p=s->top;
        s->top=s->top->next;
        free(p);
        s->cnt--;
        return 1;
    }
    
    int get(linkstack *s)
    {
        if(length(s)==0)
        return -1;
        return s->top->data;
    }
    
    int clear(linkstack *s)
    {
        linkstackptr q,p=s->top;
        while(p)
        {
            q=p;
            p=p->next;
            free(q);
        }
        s->cnt=0;
        return 1;
    }
    
    int show(linkstack *s)
    {
        if(s->cnt==0)
        return -1;
        linkstackptr p=s->top;
        while(p)
        {
            printf("%d ",p->data);
            p=p->next;
        }
        printf("
    ");
    }
    
    int main()
    {
    	int k;
        linkstack L;
        k=Initstack(&L);
        if(k==-1)
        {
            printf("内存分配失败,栈的链式储存初始化失败
    ");
            return 0;
        }
        else
        {
            printf("恭喜你!内存分配成功,栈的链式储存初始化成功!栈中元素为零!
    ");
        }
        printf("请输入一些元素,用以入栈!以输入-1代表结束:
    ");
        int n;
        while(~scanf("%d",&n))
        {
            if(n==-1)
            break;
            push(&L,n);
        }
        printf("压栈成功!栈顶到栈底元素为:
    ");
        show(&L);
        char s[50];
        printf("输入你想要进行的操作(输入end代表结束):push,length,pop,get,clear,show
    ");
        memset(s,'',sizeof(s));
        while(~scanf("%s",s))
        {
            if(!strcmp(s,"end"))
            break;
            if(!strcmp(s,"push"))
            {
                int flag,tmp;
                printf("请输入你要压入栈顶的元素:");
                scanf("%d",&flag);
                tmp=push(&L,flag);
                if(flag==-1)
                printf("动态内存分配失败!压栈失败!
    ");
                else
                {
                    printf("动态内存分配成功!压栈成功!
    栈顶到栈底元素为:");
                    show(&L);
                }
            }
            if(!strcmp(s,"length"))
            {
                int tmp;
                tmp=length(&L);
                printf("栈中元素个数为:%d
    ",tmp);
            }
            if(!strcmp(s,"pop"))
            {
                int flag;
                flag=pop(&L);
                if(flag==-1)
                printf("栈中元素个数为零,出栈失败!
    ");
                else
                {
                    printf("恭喜你!出栈成功!
    栈顶到栈底的元素为:");
                    show(&L);
                }
            }
            if(!strcmp(s,"get"))
            {
                int flag;
                flag=get(&L);
                if(flag==-1)
                printf("栈中元素个数为零,获取栈顶元素失败!
    ");
                else
                {
                    printf("恭喜你!获取成功,栈顶元素为:%d
    ",flag);
                }
            }
            if(!strcmp(s,"clear"))
            {
                int flag,tmp;
                flag=clear(&L);
                if(flag==1)
                {
                    tmp=length(&L);
                    printf("恭喜你!清理成功,栈中元素为:%d
    ",tmp);
                    printf("程序结束!
    ");
                    break;
                }
            }
            if(!strcmp(s,"show"))
            {
                int flag,tmp;
                flag=length(&L);
                if(flag==0)
                printf("栈中元素个数为零!展示失败!
    ");
                else
                {
                    printf("恭喜你!展示成功,栈顶到栈底元素为:
    ");
                    tmp=show(&L);
                }
            }
            memset(s,'',sizeof(s));
        }
        return 0;
    }
    
  • 相关阅读:
    ThinkPHP 3.2.2 视图模板中使用字符串截取函数
    Java实现洛谷 P2802 回家
    Java实现洛谷 P2802 回家
    Java实现 蓝桥杯VIP 算法提高 change
    Java实现 蓝桥杯VIP 算法提高 change
    Java实现 蓝桥杯VIP 算法提高 change
    Java实现蓝桥杯G将军
    Java实现蓝桥杯G将军
    Java实现蓝桥杯G将军
    Java实现 蓝桥杯 算法提高 字符串压缩
  • 原文地址:https://www.cnblogs.com/Yqifei/p/12687711.html
Copyright © 2011-2022 走看看