• 2 链式存储栈


    1. 若是栈中元素的数目变化范围较大或不清楚栈元素的数目,就应该考虑使用链式存储结构。人们将用链式存储结构表示的栈称作"链栈"。链栈通常用一个无头结点的单链表表示。

    参考文档:

    http://blog.csdn.net/hguisu/article/details/7674195

    大话数据结构

    2. 代码

     1 typedef struct StackNode
     2 {
     3     int data;
     4     struct StackNode *next;
     5 }StackNode,*LinkStackPtr;
     6 
     7 typedef struct LinkStack
     8 {
     9     LinkStackPtr top;
    10     int count;
    11 }LinkStack;
    12 
    13 //1. 初始化
    14 LinkStack* init_linkStack()
    15 {
    16     LinkStack *s2=(LinkStack*)malloc(sizeof(LinkStack));
    17     s2->top=NULL;
    18     s2->count=0;
    19     return s2;
    20 }
    21 
    22 //2. 入栈
    23 int push_linkStack(LinkStack*s2,int &e)
    24 {
    25     LinkStackPtr node=(LinkStackPtr )malloc(sizeof(StackNode));
    26     node->data=e;
    27     node->next=s2->top;
    28     s2->top=node;
    29     //cout<<s2->count;
    30     s2->count++;
    31 
    32     return 0;
    33 }
    34 
    35 //3. 出栈
    36 int pop_linkStack(LinkStack*s2)
    37 {
    38     LinkStackPtr node=NULL;
    39     //cout<<s2->top;
    40     //cout<<s2->count;
    41     if(s2->count==0)
    42         return -1;
    43         int a=s2->top->data;
    44     s2->top=s2->top->next;
    45     s2->count--;
    46     
    47     
    48 
    49     return a;
    50 }
    51 
    52 //4. 遍历
    53 int print_linkStack(LinkStack*s2)
    54 {
    55     LinkStack *ss=s2;
    56     LinkStackPtr node=ss->top;
    57     int k=ss->count;
    58     while(k>0)
    59     {
    60         printf(" %5d",s2->top->data);
    61         ss->top=ss->top->next;
    62         k--;
    63     }
    64     return 0;
    65 }

    3. 测试代码

     1 int main()
     2 {
     3     LinkStack *s2;
     4     int elem=0;
     5     int ret=0;
     6     int t1=11;
     7     int t2=12;
     8     int t3=13;
     9     int t4=14;
    10     int t5=15;
    11 
    12     //1. 初始化 LinkStack* init_linkStack()
    13     s2=init_linkStack();
    14     //cout<<s2->count;
    15 
    16     //2. 入栈int push_linkStack(LinkStack*s2,int e)
    17     printf("
    入栈:
    ");
    18     ret=push_linkStack(s2,t1);
    19     printf("%5d",s2->top->data);
    20     ret=push_linkStack(s2,t2);
    21     printf("%5d",s2->top->data);
    22     ret=push_linkStack(s2,t3);
    23     printf("%5d",s2->top->data);
    24     ret=push_linkStack(s2,t4);
    25     printf("%5d",s2->top->data);
    26     ret=push_linkStack(s2,t5);
    27     printf("%5d",s2->top->data);
    28 
    29     //cout<<s2->top;
    30     //3. 遍历int print_linkStack(LinkStack*s2)
    31     //ret=print_linkStack(s2);
    32     
    33     //4, 出栈 int pop_linkStack(LinkStack*s2,int &e)
    34     printf("
    出栈:
    ");
    35     elem=pop_linkStack(s2);
    36     printf(" %5d",elem);
    37     elem=pop_linkStack(s2);
    38     printf(" %5d",elem);
    39     elem=pop_linkStack(s2);
    40     printf(" %5d",elem);
    41     elem=pop_linkStack(s2);
    42     printf(" %5d",elem);
    43     elem=pop_linkStack(s2);
    44     printf(" %5d",elem);
    45 
    46 
    47     cout<<endl<<"hello";
    48     system("pause");
    49     return 0;
    50 }

    4. 测试结果

     

  • 相关阅读:
    windows 2008 64位在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
    uva 11552 dp
    A*搜索算法
    Dalvik虚拟机总结
    J2SE基础:5.面向对象的特性2
    Linux/Android——input_handler之evdev (四)【转】
    Linux/Android——input子系统核心 (三)【转】
    Linux/Android——输入子系统input_event传递 (二)【转】
    【Android】Android输入子系统【转】
    Linux/Android——usb触摸屏驱动
  • 原文地址:https://www.cnblogs.com/584709796-qq-com/p/5811206.html
Copyright © 2020-2023  润新知