⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lstack.h

📁 一些基本的数据结构
💻 H
字号:
/**************2008.2.6*********************链式栈的操作*******************************/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <process.h>
/**********************************************************/
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1

typedef int Status;
typedef int Boolean;
/************************************************************/

typedef int Element;

typedef struct LNode
        {
          Element data;
          struct LNode *next;
        }LNode, *Llist;

typedef struct Linkstack
        {
          Llist base,top;
          int stacksize;
        }Linkstack;


/****************************************************************/

/*********************栈的链式基本操作****************************/

/*************插入元素***********************/
Status Link_insert( Llist *p, Element *e )
{
  *p = ( Llist )malloc( sizeof( LNode ) );
  if( !*p )
  return ERROR;
  (*p)->data = *e;
  return OK;
}
Status Push( Linkstack *L, Llist *s )
{ 
	Llist p, q;
    if( !(*L).base )
                                 return ERROR;
    (*L).stacksize++;
    if( (*L).stacksize == 1 )
	 { 
		(*L).base = *s;
	    (*L).base->next = (*L).top;
	} 

	else
	{
	  p=(*L).base ;
      while( p->next!= (*L).top )
		   {             
		     p = p->next;
		   }
      p->next=(*s);
   	 (*s)->next = (*L).top;
	}
  (*L).top->next=NULL;
  return OK;
}
/************************************************/

/******************建立一个空栈*****************/
Status Init_Lstack( Linkstack *L )
{ 
 Llist p;
 p = ( Llist )malloc( sizeof( LNode ) );
 if( p )
 {
  p->next = NULL;
  (*L).base = (*L).top = p;
  (*L).stacksize = 0;
  return OK;
 }
 else
  return ERROR;
}
/*********************************************/

/********************清空栈*******************/
Status Clear_Lstack( Linkstack *L)
{
 Llist p, q;
 if( (*L).base != (*L).top )
 {
  p = q = (*L).base->next;
  (*L).base->next = NULL;
  while( p != (*L).top )
  {
   p = q->next;
   free( q );
   q = p;
  }
  free( p );
  (*L).top = (*L).base;
  (*L).stacksize = 0;
 }
 return OK;
}
/*********************************************/

/***************销毁栈************************/
Status DestoyLinkstack( Linkstack *L )
{
  Llist p;
  Clear_Lstack( L );
 p=(*L).base ;
 free( p );
 p = NULL;
 (*L).top = NULL;
 (*L).stacksize = 0;
 return OK;
}
/*********************************************/
/**************判断栈空**********************/
Status LinkstackEmpty( Linkstack L )
{
 if( L.stacksize )
  return FALSE;
 else
  return TRUE;
}


/**************获取栈顶元素*********/
Status LinkstackGetTop( Linkstack L, Element *e )
{
   Llist q;
   if( L.stacksize==0 )
                                return ERROR;
   q = L.base;
   while( q->next!=L.top)        q=q->next;
                      
  *e=q->data;
  return OK;
}
  
/************************************/
/***********删除栈顶元素*************/


Status LinkstackPop( Linkstack *L, Element *e )
{
 Llist p,q;
 if( (*L).stacksize == 0 )
  return OK;
  p = (*L).top;
  q = (*L).base;
  while( q->next!=p )
                       q=q->next;
  *e=q->data;
  q->next = NULL;
  free( p );
 (*L).top = q;
 (*L).stacksize--;
 return OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -