• 堆栈的链式存储实现


     

     链式栈头文件:

     1 #pragma once
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 
     5 //链式栈的结点
     6 typedef struct LINKNODE
     7 {
     8     LINKNODE* next;
     9 }LinkNode;
    10 
    11 //链式栈
    12 typedef struct LINKSTACK
    13 {
    14     LinkNode head;
    15     int size;
    16 }LinkStack;
    17 
    18 //初始化链表
    19 LinkStack* Init_LinkStack();
    20 //入栈
    21 void Push_LinkStack(LinkStack* lstack, LinkNode* value);
    22 //出栈
    23 void Pop_LinkStack(LinkStack* lstack);
    24 //返回栈顶元素
    25 LinkNode* Top_LinkStack(LinkStack* lstack);
    26 //返回栈元素个数
    27 int Size_LinkStack(LinkStack* lstack);
    28 //清空栈
    29 void Clear_LinkStack(LinkStack* lstack);
    30 //销毁栈
    31 void Free_LinkStack(LinkStack* lstack);

     链式栈实现文件:

     1 #include "栈的链式存储.h"
     2 //初始化链表
     3 LinkStack* Init_LinkStack()
     4 {
     5     LinkStack* lstack = (LinkStack*)malloc(sizeof(LinkStack));
     6     if (lstack == NULL)
     7     {
     8         exit(1);
     9     }
    10 
    11     lstack->head.next = NULL;
    12     lstack->size = 0;
    13 
    14     return lstack;
    15 }
    16 //从头节点入栈
    17 void Push_LinkStack(LinkStack* lstack, LinkNode* value)
    18 {
    19     if (lstack == NULL)
    20     {
    21         exit(1);
    22     }
    23 
    24     if (value == NULL)
    25     {
    26         exit(1);
    27     }
    28 
    29     value->next = lstack->head.next;
    30     lstack->head.next = value;
    31     lstack->size++;
    32 }
    33 //出栈
    34 void Pop_LinkStack(LinkStack* lstack)
    35 {
    36     if (lstack == NULL)
    37     {
    38         exit(1);
    39     }
    40 
    41     if (lstack->size == 0)
    42     {
    43         exit(1);
    44     }
    45 
    46     //
    47     LinkNode* pCurrent = lstack->head.next;
    48     lstack->head.next = pCurrent->next;
    49     lstack->size--;
    50 }
    51 //返回栈顶元素
    52 LinkNode* Top_LinkStack(LinkStack* lstack)
    53 {
    54     if (lstack == NULL)
    55     {
    56         exit(1);
    57     }
    58 
    59     if (lstack->size == 0)
    60     {
    61         exit(1);
    62     }
    63 
    64     return lstack->head.next;
    65 }
    66 //返回栈元素个数
    67 int Size_LinkStack(LinkStack* lstack)
    68 {
    69     if (lstack == NULL)
    70     {
    71         exit(1);
    72     }
    73 
    74     return lstack->size;
    75 }
    76 //清空栈
    77 void Clear_LinkStack(LinkStack* lstack)
    78 {
    79     if (lstack == NULL)
    80     {
    81         exit(1);
    82     }
    83 
    84     lstack->head.next = NULL;
    85     lstack->size = 0;
    86 }
    87 //销毁栈
    88 void Free_LinkStack(LinkStack* lstack)
    89 {
    90     if (lstack == NULL)
    91     {
    92         exit(1);
    93     }
    94 
    95     free(lstack);
    96 }

    链式栈测试:

     1 #include"栈的链式存储.h"
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<stdio.h>
     5 
     6 #define M 8
     7 #define N 3
     8 //数据元素结构体
     9 typedef struct PERSON
    10 {
    11     LinkNode node;
    12     char name[64];
    13     int age;
    14 }Person;
    15 
    16 int main(int argc, const char* argv[])
    17 {
    18     //创建循环链表
    19     LinkStack* lstack = Init_LinkStack();
    20 
    21     //创建数据
    22     Person p1, p2, p3, p4, p5;
    23     strcpy_s(p1.name, "aaa");
    24     strcpy_s(p2.name, "bbb");
    25     strcpy_s(p3.name, "ccc");
    26     strcpy_s(p4.name, "ddd");
    27     strcpy_s(p5.name, "eee");
    28     
    29     p1.age = 20;
    30     p2.age = 30;
    31     p3.age = 40;
    32     p4.age = 50;
    33     p5.age = 60;
    34 
    35     //入栈
    36     Push_LinkStack(lstack, (LinkNode*)&p1);
    37     Push_LinkStack(lstack, (LinkNode*)&p2);
    38     Push_LinkStack(lstack, (LinkNode*)&p3);
    39     Push_LinkStack(lstack, (LinkNode*)&p4);
    40     Push_LinkStack(lstack, (LinkNode*)&p5);
    41 
    42     //出栈
    43     Person* tmp = (Person*)Top_LinkStack(lstack);
    44     printf("name %s age %d
    ", tmp->name, tmp->age);
    45 
    46     //删除
    47     Pop_LinkStack(lstack);
    48 
    49     //出栈
    50     tmp = (Person*)Top_LinkStack(lstack);
    51     printf("name %s age %d
    ", tmp->name, tmp->age);
    52 
    53     //判断是否为空
    54     int ret = Size_LinkStack(lstack);
    55     printf("判断是否为空:%d
    ", ret);
    56     //清空栈
    57     Clear_LinkStack(lstack);
    58     
    59     //释放
    60     Free_LinkStack(lstack);
    61     system("pause");
    62     return 0;
    63 }
  • 相关阅读:
    redis初步入门(2)
    redis初步入门(1)
    iOS9 中 alertView 的使用
    iOS应用 数据存储方式 (一)
    Python 选课系统
    Python 计算器
    Python ATM
    Python 购物车
    Python 城市列表
    Python 基础登入接口
  • 原文地址:https://www.cnblogs.com/dhhu007/p/13197918.html
Copyright © 2020-2023  润新知