数据结构C语言实现栈
来源:互联网 发布:淘宝异地客服招聘 编辑:程序博客网 时间:2024/04/20 19:21
头文件
#ifndef STACKHEAD_H_INCLUDED
#define STACKHEAD_H_INCLUDED#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STACK_INIT_SIZE 10
#define STACK_INCR_SIZE 3
typedef struct Sqstack
{
int* Sbase ;
int* Stop ;
int StackSize ;
} Sqstack ;
//实现栈
int InitStack( Sqstack* s ) ;
int DestroyStack( Sqstack* s ) ;
int GetTop( Sqstack s , int* e ) ;
int GetLength( Sqstack s ) ;
int Push( Sqstack* s , int e ) ;
int Pop( Sqstack* s , int* e ) ;
int IsEmpty( Sqstack s ) ;
int ClearStack( Sqstack* s ) ;
int TraveserStack( Sqstack s ) ;
//栈的应用
int DataConvert( int data ) ;//数制转换
#endif // STACKHEAD_H_INCLUDED
栈的实现
#include "stackhead.h"
int InitStack( Sqstack* s )
{
s->Sbase = ( int* )malloc( STACK_INIT_SIZE * sizeof( int ) ) ;
if( !s->Sbase )
{
printf( " OVERFLOW !\n" ) ;
exit( 1 ) ;
}
memset( s->Sbase , 0 , STACK_INIT_SIZE * sizeof( int ) ) ;
s->Stop = s->Sbase ;
s->StackSize = STACK_INIT_SIZE ;
return 0 ;
}
int DestroyStack( Sqstack* s )
{
int* p = --s->Stop ;
while( s->Stop != s->Sbase )
{
s->Stop-- ;
free( p-- ) ;
}
free( s->Sbase ) ;
free( p ) ;
return 0 ;
}
int Push( Sqstack* s , int e )
{
if( s->Stop - s->Sbase >= s->StackSize )
{
s->Sbase = ( int* )realloc( s->Sbase , ( s->StackSize + STACK_INCR_SIZE ) * sizeof( int ) ) ;
s->Stop = s->Sbase + STACK_INIT_SIZE ;
s->StackSize += STACK_INCR_SIZE ;
if( !s->Sbase )
{
printf( " OVERFLOW !\n" ) ;
exit( 1 ) ;
}
}
*s->Stop++ = e ;
return 0 ;
}
int GetLength( Sqstack s )
{
return s.Stop - s.Sbase ;
}
int GetTop( Sqstack s , int* e )
{
if( s.Sbase == s.Stop )
{
printf( "ERROR!\n") ;
exit( 1 ) ;
}
*e = *--s.Stop ;//为什么改成 e = --s.Stop ; 不行?
return 0 ;
}
int Pop( Sqstack* s , int* e )
{
if( s->Sbase == s->Stop )
{
printf( "the stack is empty !\n" ) ;
exit( 1 ) ;
}
*e = *--s->Stop ;
return 0 ;
}
int IsEmpty( Sqstack s )
{
if( s.Sbase == s.Stop )
{
return 1 ;
}
return 0 ;
}
int ClearStack( Sqstack* s )
{
memset( s->Sbase , 0 , s->StackSize * sizeof( int ) ) ;
s->Stop = s->Sbase ;
return 0 ;
}
int TraveserStack( Sqstack s )
{
if( s.Stop == s.Sbase )
{
printf( "the stack is empty !\n" ) ;
exit( 1 ) ;
}
int* p = s.Sbase ;
while( p != s.Stop )
{
printf( "%d\t" , *p++ ) ;
}
printf( "\n" ) ;
return 0 ;
}
栈的应用
#include "stackhead.h"
int DataConvert( int data )//十进制的数转换成八进制的数
{
Sqstack datastack ;
InitStack( &datastack ) ;
while( data )
{
Push( &datastack , data % 8 ) ;
data /= 8 ;
}
while( !IsEmpty( datastack ) )
{
int e ;
Pop( &datastack , &e ) ;
printf( "%d" , e ) ;
}
printf( "\n" ) ;
return 0 ;
}
- 数据结构C语言实现栈
- 数据结构.栈(C语言实现)
- 数据结构---栈C语言实现
- 数据结构栈C语言实现
- 数据结构(C语言实现)
- 数据结构C语言实现
- 数据结构(C语言实现)
- C语言实现数据结构中的顺序栈
- C语言实现数据结构中的链栈
- C语言实现堆栈(栈)的数据结构
- 数据结构C语言实现之顺序栈
- 数据结构C语言实现之链栈
- <数据结构>顺序栈的C语言实现
- <数据结构>链栈的C语言实现
- C语言实现栈数据结构操作
- [数据结构]C语言栈的实现
- 数据结构--顺序栈实现(c语言)
- 数据结构-链式栈-C语言实现
- mysql--一个表上可以指定几个auto_increment
- mysql源码安装
- spring aop 配置
- mysql上利用通配符模糊匹配数据库进行grant
- OSGI
- 数据结构C语言实现栈
- [IOS] Storyboard全解析-第一部分
- (二维线段树) Matrix (P2155)
- mysql show variables
- 假如你的CSDN不能上了,你会怎么办?
- Linux Socket学习 (转自 http://blog.chinaunix.net/uid/13670711/frmd/-1/page/7.html)
- BMP文件结构
- C/C++中的字节对齐
- Java集合类总结