您的位置:首页 > 编程语言 > C语言/C++

栈的链式实现(C语言)

2016-04-18 20:51 351 查看
栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。在表中,允许插入和删除的一端称作“栈顶(top)”,不允许插入和删除的另一端称作“栈底(bottom)”。

通常称往栈顶插入元素的操作为“入栈”,称删除栈顶元素的操作为“出栈”。因为后入栈的元素先于先入栈的元素出栈,故被称为是一种“后进先出”的结构,因此又称 LIFO 表(Last In First Out的缩写)。

和线性表类似,栈也有两种存储表示:顺序栈和链栈。下面仅介绍栈的链式存储实现。

栈的定义:

C++ Code
1

2

3

4

5

6

7

8

typedef struct node //栈的结点结构

{

int data;

struct node *next;

}L,*Link;

typedef struct{ //栈顶作链表的头部

Link top;

}S,*Stack;
初始化

C++ Code
1

2

3

4

5

6

7

Stack init_stack()

{

Stack s;

s=(Stack )malloc (sizeof(S ));

if(s) s->top =NULL;

return s;

}


入栈

C++ Code
1

2

3

4

5

6

7

8

9

10

11

12

13

14

int push_stack(Stack s,int x)

{

Link p;

p=(Link )malloc (sizeof(L));

if(!p)

{

printf("内存溢出");

return 0;

}

p->data =x;

p->next =s->top ; //将新结点插入到栈顶位置

s->top =p; //栈顶指针指向最新的结点

return 1;

}


如上图,在入栈两个结点后,栈顶指针指向最新入栈的结点a2,同时结点a2的指针域指向下一个结点,最先入栈的结点指针域为空。

出栈

C++ Code
1

2

3

4

5

6

7

8

9

10

11

12

13

14

int pop_stack(Stack s,int &x)

{

Link p;

if(s->top ==NULL)

{

printf("栈空");

return 0;

}

x=s->top ->data ;

p=s->top ;

s->top=s->top ->next ; //出栈后,栈顶指针指向下一个结点

free(p);

return 1;

}
销毁栈

C++ Code
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

void destroy_stack(Stack &s)

{

Link p,q;

if(s)

{

p=s->top ;

while(p)

{

q=p;

p=p->next ;

free(q);

}

free(s);

}

s=NULL;

return;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: