C/C++语言之链栈(初始化,入栈,遍历,查找)

  • 链式栈
      • 定义:用链式存储结构实现的栈
      • 实现:单链表(通常)
      • 结点类型:同单链表结点
      • 操作在栈顶,常不设头结点
  • 链栈操作
      • 运算受限的单链表
      • 易于实现,不作详细讨论
  • 特点
      • 链栈无栈满问题
      • 链表头在栈顶   
      •    
      • 源代码:
        #include <stdio.h>
        #include <stdlib.h>
        #include <malloc.h>
        #define ElemType char
        typedef struct Node//定义栈存储结构
        {
            ElemType data;
            Node *next;
        }node, *pnode;
        //定义栈结构
        typedef struct Nstack //定义栈的维护结构
        {
            pnode Top;//栈顶
            pnode Bottom;//栈底
        }Stack, *pStack;
        //初始化栈
        void Nstack_Init(pStack s)
        {
        
            s->Top = (pnode)malloc(sizeof(node));
            if (s->Top == NULL)
            {
                printf("栈创建失败\n");
            }
            s->Top->next = NULL;
            s->Bottom = s->Top;
            printf("%p  %p\n", s->Bottom, s->Top);
        
        }
        //入栈
        void push_stack(pStack s, ElemType n)
        {
        
            pnode pnew = (pnode)malloc(sizeof(Node));
            if (pnew == NULL){ exit(-1); }
            pnew->data = n;
            pnew->next = s->Top;
            s->Top = pnew;
        }
        //遍历栈并统计元素个数
        void pop_stack(pStack s)
        {
            int c = 0;
            pnode pnew = s->Top;
            if (pnew->next == NULL)printf("栈为空\n");
            while (pnew != s->Bottom)
            {
                printf("%c\n", pnew->data);
                pnew = pnew->next;
                c++;
            }
            printf("栈中现在共有元素: %d\n", c);
        }
        //移除栈顶元素
        void delete_elem(pStack s)
        {
            if (s->Bottom == s->Top){ printf("空栈\n"); }
            pnode fg = s->Top;
            printf("移除的栈顶元素为:%c\n", fg->data);
            s->Top=s->Top->next;
            printf("当前元素位:%c\n",s->Top->data);
            /*pnode fgs = s->Top->next;
            printf("当前栈顶元素为:%c\n", fgs->data);*/
        }
        //查找链栈元素
        void seek_elem(pStack s, ElemType m)
        {
            if (s->Bottom == s->Top){ printf("空栈\n"); }
            pnode seek = s->Top;
            while(seek->data!=m)
            {
                seek= seek->next;
            }
        
            printf("找到元素 %c\n",seek->data);
                
        
        
        }
        
        Stack ss;
        int main()
        {
            Nstack_Init(&ss);
            push_stack(&ss, '1');
            push_stack(&ss, '2');
            push_stack(&ss, '3');
            push_stack(&ss, '4');
            pop_stack(&ss);
            delete_elem(&ss);
            pop_stack(&ss);
            seek_elem(&ss, '2');
            system("pause");
            return 0;
        }

猜你喜欢

转载自blog.csdn.net/qq_39016425/article/details/84032319