码迷,mamicode.com
首页 > 其他好文 > 详细

5、蛤蟆的数据结构笔记之五链栈实现

时间:2015-06-11 09:35:17      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

5、蛤蟆的数据结构笔记之五链栈实现

    本篇名言:“人生就像奕棋,一步失误,全盘皆输。

         昨天对栈和队列进行了定义。这次我们来看下如何使用代码来实现链栈和链队列,后续蛤蟆会记录如何将栈应用到实际问题中。

         栈一般是顺序结构,但是也可以采用链式存储结构,具体如下实现。

 欢迎转载,转载请标明出处:

1.  定义结构体

 

#define MAX_STACKS10

typedef struct {

         intkey;

         /*otherfields */

}element;

 

typedef struct stack *stack_pointer;

typedef struct stack {

         elementitem;

         stack_pointerlink;

};

stack_pointer top[MAX_STACKS];

两个结构体,其中一个结构包含在另一个结构体中。

定义了链栈中节点上限数量为10.

 

 

2.  链栈的插入

 

void add(stack_pointer *top,element item)

{

         stack_pointertemp = (stack_pointer)malloc(sizeof(stack));

         if(IS_EMPTY(temp)){

                   fprintf(stderr,"Thememory is full\n");

                   exit(1);

         }

         temp->item= item;

         temp->link=*top;

         *top =temp;

}

函数需要输入top 指向栈顶元素。需要入栈的元素,element。

 

3.  链栈的删除

删除节点函数,返回栈顶元素,并改变top,使其指向包含在其链域中的地址。典型调用item=deletenode(&top[stack_no]);

 

element deletenode(stack_pointer *top){

         stack_pointertemp = *top;

         elementitem;

         if (IS_EMPTY(temp)){

                   fprintf(stderr,"Thestack is empty\n");

                   exit(1);

         }

         item =temp->item;

         *top =temp->link;

         free(temp);

         returnitem;

}

 

4.  链栈输出

为便于调式,输出整个链栈中的值。

void print_node( stack_pointer top){

         if (IS_EMPTY(top)){

                   fprintf(stderr,"Thestack is empty\n");

                   exit(1);

         }

         for(top;top;top=top->link)

         {

                   printf("%d   ",top->item);

         }

        

}

 

 

5.  链栈综合

 

如下代码实现一个综合性的测试,最后如下图 1所示:

void main()

{

         inti;

         elementtemp ;

         for(i=0;i<10;i++)

         {

                   top[i]= NULL;

         }      

         for(i=0;i<10;i++)

         {

                   temp.key= i;

                   add(&header,temp);

         }

         printf("afteradd 10 nodes\n");

         print_node(header);

         printf("\n");

         for(i=0;i<4;i++)

         {

                   deletenode(&header);

         }

         printf("afterdelete 4 nodes\n");

         print_node(header);

         printf("\n");

         for(i=0;i<6;i++)

         {

                   deletenode(&header);

         }

         printf("afterdelete left 6 nodes\n");

         print_node(header);

 

}

 技术分享

  

6.  链栈源码

方便大家编译,所有代码复制如下:

#include "stdio.h"

#include "stdlib.h"

#define IS_EMPTY(ptr)(!(ptr))

#define IS_FULL(ptr)  (!(ptr))

#define MAX_STACKS10

typedef struct element{

         intkey;

         /*otherfields */

}element;

 

typedef struct stack *stack_pointer;

typedef struct stack {

         elementitem;

         stack_pointerlink;

}stack;

stack_pointer top[MAX_STACKS];

stack_pointer header =NULL;

 

void add(stack_pointer *top,element item)

{

         stack_pointertemp = (stack_pointer)malloc(sizeof(stack));

         if(IS_EMPTY(temp)){

                   fprintf(stderr,"Thememory is full\n");

                   exit(1);

         }

         temp->item= item;

         temp->link=*top;

         *top =temp;

         header= temp;

}

 

 

element deletenode(stack_pointer *top){

         stack_pointertemp = *top;

         elementitem;

         if (IS_EMPTY(temp)){

                   fprintf(stderr,"Thestack is empty\n");

                   exit(1);

         }

         item =temp->item;

         header= temp->link;

         free(temp);

         returnitem;

}

 

void print_node( stack_pointer top){

         if (IS_EMPTY(top)){

                   fprintf(stderr,"Thestack is empty\n");

                   exit(1);

         }

         for(top;top;top=top->link)

         {

                   printf("%d   ",top->item);

         }

        

}

 

void main()

{

         inti;

         elementtemp ;

         for(i=0;i<10;i++)

         {

                   top[i]= NULL;

         }      

         for(i=0;i<10;i++)

         {

                   temp.key= i;

                   add(&header,temp);

         }

         printf("afteradd 10 nodes\n");

         print_node(header);

         printf("\n");

         for(i=0;i<4;i++)

         {

                   deletenode(&header);

         }

         printf("afterdelete 4 nodes\n");

         print_node(header);

         printf("\n");

         for(i=0;i<6;i++)

         {

                   deletenode(&header);

         }

         printf("afterdelete left 6 nodes\n");

         print_node(header);

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5、蛤蟆的数据结构笔记之五链栈实现

标签:

原文地址:http://blog.csdn.net/notbaron/article/details/46447195

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!