登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 854|回复: 0

[C,C++教程] 【C语言】链式栈数据结构

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-6-30 22:54:36 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. #include <stdio.h>
    , y7 m+ {9 V2 O8 }8 A& N) \- i
  2. #include <stdbool.h>
    ) u: c; D2 h2 k7 {( I! n, u- E
  3. #include <malloc.h>/ P$ F# l6 l% V3 _
  4. typedef int DataType;
    4 r2 f0 x7 Q# d: k2 h, B
  5. typedef struct stacknode
    3 h5 x- h  f7 \5 Q: B. u; {
  6. {
    % w% t4 B- X+ u" k
  7.     struct LinkStack *next;6 w- O. K6 P$ W# ^/ y' R
  8.     DataType data;
      V8 }$ g+ p0 X7 C% Q" s4 ?
  9. ; {, O- E# t% I8 b, x) }1 S
  10. }LinkStack;- [% Z3 \/ l' g% X
  11. LinkStack *InitStack()
    " c5 H" t7 n( ~9 \# j
  12. {
    ! }" z; [7 {! {# l6 v1 x% f
  13.     LinkStack *s=(LinkStack *)malloc(sizeof(LinkStack));- p) s# h+ U4 M: D2 J0 d0 o( n
  14.     (*s).next=NULL;
    * L$ p  M: _1 j$ c
  15.     printf("初始化栈成功!\n");0 p7 e) d7 a1 {' g6 ?
  16.     return s;9 I" K2 h( k" g" i2 ^
  17.     8 \8 M& m6 \1 G* G7 O! [* G
  18. }2 o  y3 {( Z  h; B: l
  19. int getStackLength(LinkStack *s)
    4 P. G3 r8 H- @
  20. {
    8 e9 [. J9 t. p$ r. C
  21.     int count=0;# Y  I. K8 Q: y( R4 a
  22.     for(;(*s).next!=NULL;)% m. z/ n8 J& h6 s2 a
  23.     {6 {6 o6 X, ]! p1 ]! P# G
  24.         count++;
    + u$ B. K& r0 d0 E" N) }5 {
  25.         s=(*s).next;% e% z# h6 U: X* \
  26.     }( p8 p$ e; {% s8 A7 ]
  27.     return count;' m4 ~3 w, x8 `5 g

  28. $ |( r) C) h( |) p1 Z& S
  29. }. a- D) r* Z1 L+ s2 D
  30. void DestroyStack(LinkStack *s)5 S7 \  U3 Q6 F; K* h5 d
  31. {
    5 ^; v! [1 K0 l8 I* _* X, ]6 p
  32.    
    8 k1 n5 A! q( f  }; c1 z
  33.     int num=getStackLength(s);# V" g9 }$ b% ^/ h$ J
  34.    
    . x8 U: R+ a. `0 W
  35.     for(int i=0;i!=num;++i)
    % o9 d4 g9 U% }8 E& ^/ x
  36.     {# S( z7 K9 o% P. e
  37.       pop(s);) ?. {& D* c4 b( |
  38.     }
    ; u9 C7 O9 G/ Y3 [- P  p/ I, F4 v+ B
  39.    
    - O5 n& Z* ~" H1 K
  40.    
    ' `9 L, P; T! f; E0 o, [" ~
  41.     printf("删除成功!\n");. g9 ?& |' o  |4 M: {
  42. }; _( _. Y/ r3 t4 b

  43. 2 _& v- |  }1 ^- K* e; q
  44. + E1 V! _  h8 X2 g) u! _  @
  45. void EmptyStack(LinkStack *s)% d) G, E8 h; T9 \
  46. {
    ! O& n2 r1 f9 m/ s* m
  47.     if((*s).next==NULL?true:false)
    6 I# }' d+ o9 v( s1 y
  48.     {/ S; Z- _; r) h' |8 I4 u! |
  49.         printf("为空表!\n");
    7 g7 _9 E' J2 i
  50.     }
    9 W% G5 ?3 ]" V$ y" ?) N; Y
  51.     else printf("不为空表!\n");' P' h2 @4 Q  e4 {
  52. }+ A! l% z, f/ c0 O
  53. void push(LinkStack *s)
    ( C/ o  d- T& z( s
  54. {8 y: W1 i- p4 b" A
  55.    6 _9 W: @6 ]' j! N
  56.         printf("请输入要存入栈里面的元素个数!\n");
    # D' k' T! w6 _1 M2 w
  57.         int num;
    / E8 W8 \" v" c: S9 j* U- j
  58.         scanf("%d",&num);
    # [! E& z8 }1 t2 {( m. F
  59.         printf("请输入元素值!\n");
    5 j5 }, e1 ^1 t0 x: ~( }) V! x' k
  60.         for(int i=0;i!=num;++i)- z) p7 Q5 }# v% S  A
  61.         {  R- M& ?  t) `+ \8 |( U" M) X
  62.             LinkStack *p=(LinkStack*)malloc(sizeof(LinkStack));. ^/ r: ]" Z. X  g) n0 a
  63.            
    : |/ p4 G5 e5 O. J, w, e% o; e
  64.             scanf("%d",&((*p).data));
    8 }" z3 }- Y6 Y4 B3 F3 v
  65.             (*s).next=p;
    2 N/ z7 ~7 I+ R  y" O
  66.             (*p).next=NULL;5 l) C3 P+ F1 |7 _! O
  67.             s=p;
    5 i" R0 n) m4 K( a
  68.         8 a3 q. Q5 {9 }" z" e
  69.         }( Q, [# X! s9 V
  70.         printf("入栈成功!\n");
    5 x& V1 q6 O$ ?2 c( D' k. ?% o
  71.    
    : p" L' f9 {: N- u" `) O. q; F* a
  72.     + L0 Y( H1 ^2 M7 L
  73.     0 ]& K, T& w6 A* G% x  t
  74.     ! r' t, w8 J( f; z/ _9 M+ Y8 N
  75. }
    7 @$ {4 i* P7 X# x0 j" D
  76. DataType pop(LinkStack *s)
    1 o' p+ b# e5 I) }
  77. {
      J& G4 P; k: Z  k4 D8 {3 }# U; L
  78.     LinkStack *p,*p1=s;$ \0 ]5 @1 p2 L1 V
  79.     for(;(*s).next!=NULL;)
    - B9 M: I6 {8 L! G$ Y& x- q
  80.     {1 w( A" x- H7 z. \
  81.         p=s;
    % h* y" {0 F. P: I
  82.         s=(*s).next;
    ! S- \6 B1 w! O) }, K+ n/ h( \$ V
  83.     }& H* D' W0 x5 G0 i
  84.     7 \8 L' \& o7 E6 ~/ X
  85.     DataType data=(*s).data;
    4 d8 r7 f8 ~, s/ o6 m! o
  86.     (*p).next=NULL;
    2 O6 v& v' v! T1 N2 V" S
  87.     free(p);5 V: o3 Q0 i1 h5 C$ v+ ?
  88.     s=p1;
    9 B$ w  B% h, y. g  O
  89.     free(p1);
    3 }- x5 }# B3 U8 i/ n. k/ s
  90.     return data;
    8 T/ h4 k! G7 q: c& t
  91.       
    ) x% V% B% `* M! n9 `( E" h% @* V4 L
  92.     - c9 z+ c" }( A" ]
  93. }
    + G7 Y) B0 I3 Z4 ^* h. y+ J. {
  94. 4 T- p. Q! {7 g% g4 Q6 T5 `% o' [
  95. LinkStack *getTop(LinkStack *s)6 \# U. ^5 r+ y& h
  96. {; j: @/ a9 o/ V* g
  97.     LinkStack *p=s,*p1;3 R( k. K  H; F4 w2 \6 [; s, K, B3 K: L
  98.     for(;(*s).next!=NULL;)0 D$ v- K) Z0 E; H' F" _
  99.     {
    * w; Y- [: X6 d4 u' E5 |
  100.         s=(*s).next;
    4 e4 m+ F! y4 o# N2 I1 k! v
  101.     }2 y6 V$ z# y+ c
  102.     p1=s;9 e% y0 e: a6 z
  103.     s=p;
    3 y  ~' W- D; B+ j4 I" L
  104.     return p1;' q  Z7 m: z) Q$ P/ a
  105. }: e9 g7 n. F0 N5 x# G* e

  106. # M' P1 R& F( h" s
  107. " I/ m5 w3 p. K: a/ \$ \; @, @
  108. : u' x. d% w  L  k- R: Z% b
  109. : o! e! }# ]9 [
  110. main()
    / S& |$ `% L, y% ^
  111. {
    % J2 F: o/ ^/ s: ?: Q# }+ r
  112.     LinkStack *test;/ E* j/ `! p* k0 v" d) c
  113.     test=InitStack();
    % l8 s- _7 v6 v
  114.     EmptyStack(test);
    " S; p6 ?) r! P; @& Y
  115.     push(test);
    2 |7 t( n$ S; {
  116.     //printf("%d\n",getTop(test)->data);$ g8 D9 a  _% _1 s- @; t
  117.    // pop(test);: r3 R+ [: E8 M' k) u$ I( f' W
  118.    
    4 N* Z( Y! z  a1 E% ]! E; C
  119.    
    : e  c) |; _7 e1 X2 A
  120.    //EmptyStack(test);. ?6 i- o: N0 f& x, [6 z
  121.    DestroyStack(test);
    * t: g! _% f" K/ `
  122.    // printf("%d\n",getTop(test)->data);
    2 ~( `; o) q  z; \7 S
  123.     printf("%d\n", getStackLength(test));
    : \, E1 ?  ?8 S$ Q6 o5 y
  124.    EmptyStack(test);! c$ i) ~1 c# q% [
  125.     $ j' e# K1 A5 b, B9 O
  126.     : S+ l2 ]9 e  P" P" b5 \- \
  127.     return 0;
    9 V" N+ x9 j1 \
  128. }7 y) R* C; i- M% D9 B" R
  129.    
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|星空社区 |网站地图

GMT+8, 2024-4-28 06:14 , Processed in 0.123527 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表