• 链栈基本操作


    #include<stdio.h>
    #include<stdlib.h>
    //#define NULL 0
    #define  MAXSIZE  1024            /*顺序表可能的最大长度,假设为1024 */
    typedef  int  elemtype;            /*elemtype可为任意类型,假设为int型 */
    typedef  struct  LinkedStackNode
    {    
        elemtype  data;    /*定义顺序表为一维数组*/
        struct LinkedStackNode * next;                    
    }LinkedStackNode,*LinkedStack;
    LinkedStack top;
    LinkedStack Init_LinkedStack();
    int LinkedStack_Empty(LinkedStack top);
    int Push_LinkedStack(LinkedStack top,elemtype x);
    int Pop_LinkedStack(LinkedStack top,elemtype * x);
    int GetTop_LinkedStack(LinkedStack top,elemtype * x);
    void shuchu(LinkedStack top);
    void menu();
    int main()
    {
        char cmd;
        int n,m,len,isdo;
        LinkedStack top;
        elemtype x;
        system("cls");
        menu();
        while((cmd=getchar())!='#')
        {    switch(cmd)
            {    case '1':    top=Init_LinkedStack();
                            if(top==NULL)
                            {
                                printf("申请链栈内存空间失败,程序结束");
                                return 0;        
                            }
                            printf("
    Creatied the list!
    ");
                            printf("
    
    
    			");
                            break;
                case '2':
                            printf("输入链栈元素:
    ");
                            scanf("%d",&x);
                            while(x!=0)
                            {
                                isdo= Push_LinkedStack(top,x);
                                scanf("%d",&x);
                            }
                            if(isdo==1)
                            {
                                printf("插入成功");
                            }
                            else
                            {
                                printf("插入失败"); 
                            }
                            printf("
    ");
                            printf("
    
    
    			");
                            break;
                case '3': 
                            isdo=Pop_LinkedStack(top,&x);
                            if(isdo==0)
                            {
                                printf("删除失败");
                            }
                            else
                            {
                                printf("删除成功");
                                printf("栈顶元素为 %4d",x); 
                            }
                            printf("
    
    
    			");
                            break;
                case '4':    isdo=GetTop_LinkedStack(top,&x);
                            if(isdo==0)
                            {
                                printf("查找失败");
                            }
                            else
                            {
                                printf("查找成功");
                                printf("栈顶元素为 %4d",x); 
                            }
                            printf("
    
    
    			");
                            break;            
                case '5':   printf("输出数据");
                        
                            shuchu(top);    
                            printf("
    
    
    			");
                            break;
            }
            fflush(stdin);
            system("pause");
            menu();
        }
        return 0;
    }
    void menu()
    {   system("cls");
        printf("		1-创建
    ");
        printf("		2-输入
    ");;
        printf("		3-删除栈顶元素
    ");
        printf("		4-查找栈顶元素
    ");
        printf("		5-输出
    ");
        printf("		#-quit
    ");
        printf("Please select:  ");
    }
    LinkedStack Init_LinkedStack()
    {
        LinkedStack top=(LinkedStackNode *)malloc(sizeof(LinkedStackNode));
        if(top!=NULL)
        {    top->next=NULL;
        }
        
        return top;
    }            
    int Push_LinkedStack(LinkedStack top,elemtype x)
    {
        LinkedStackNode *node;
        node=(LinkedStackNode *)malloc(sizeof(LinkedStackNode));
        if(node==NULL)
        {
            return 0;
         } 
         node->data=x;
         node->next=top->next;
         top->next=node;
         return 1;
    }
    int Pop_LinkedStack(LinkedStack top,elemtype * x)
    {
        LinkedStackNode *node;
        if(top->next==NULL)
        {
            return 0;
        }
        else
        {
            node=top->next;
            *x=node->data;
            top->next=node->next;
            free(node); 
            return 1;
        }
    }
    int GetTop_LinkedStack(LinkedStack top,elemtype * x)
    {
        if(top->next==NULL)
        {
            return 0;
        }
        else
        {
            *x=top->next->data;
            return 1;
        }
    }
    void shuchu(LinkedStack top)    
    {    
         LinkedStackNode *p;
        printf("链栈中的元素:");
        for(p=top->next;p!=NULL;p=p->next)
        {
            printf("%4d",p->data);
        }
    }
  • 相关阅读:
    swjtu oj Paint Box 第二类斯特林数
    B -- RE:从零开始的异世界生活 线段树
    EOJ Problem #3261 分词 trie + dp + 小剪枝
    129. 笔芯值
    F. Coprime Subsequences 莫比乌斯反演
    F. Clique in the Divisibility Graph DP
    D. Restructuring Company 并查集 + 维护一个区间技巧
    scut 125. 笔芯回文
    几个链接
    位处理的低级筛法
  • 原文地址:https://www.cnblogs.com/xxs812/p/7977212.html
Copyright © 2020-2023  润新知