数据结构-------C栈和队列

意外收货:本来是准备写一下数据结构中栈和队列的问题,于是百度了一下与栈相关的搜索。意外收获到了几个大神关于系统中的堆和栈的理解,虽然我自己还没有涉及到那一部分,但是预感到那也是自己的必经之路,所以搜藏了,也对大神的分享表示感谢!下面是链接,有兴趣和需要朋友的可以看看,但是请尊重原创:http://blog.csdn.net/delphiwcdj/article/details/4630757


栈的定义:栈是一种特殊的表这种表只在表头进行插入和删除操作。因此,表头对于栈来说具有特殊的意义,称为栈顶。相应地,表尾称为栈底。不含任何元素的栈称为空栈。 
栈的逻辑结构:假设一个栈S中的元素为an,an-1,..,a1,则称a1为栈底元素,an为栈顶元 素。栈中的元素按a1 ,a2,..,an-1,an的次序进栈。在任何时候,出栈的元素都是栈顶元素。换句话说,栈的修改是按后进先出的原则进行的.因此,栈又称为后进先出(Last In First Out)表,简称为LIFO表。所以,只要问题满足LIFO原则,就可以使用栈
栈是限定仅在表尾进行插入或者删除操作的线性表。如上所说:凡是具有LIFO特征的问题都可以运用栈的数据结构和思维来求解。
 
下面是栈的定义
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef char SElemType;
typedef struct 
{
	SElemType *base;
	SElemType *top;
	int stacksize;
}SqStack;

//-----基本操作的函数原型说明----- 
Status InitStack(SqStack &S)
{
	S.base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType));
	if(!S.base)
	 exit(OVERFLOW);
	 S.top=S.base;
	 S.stacksize=STACK_INIT_SIZE;
	 return OK;
}

Status DestroyStack(SqStack &S)
{
	free(S.base);
	S.base=NULL;
}


Status ClearStack(SqStack &S)
{S.top=S.base;}

Status StackEmpty(SqStack S)
{
	if(S.top==S.base)
	 return TRUE;
	else return FALSE;
}

int StackLength(SqStack S)
{return (S.top-S.base);}

Status GetTop(SqStack S,SElemType &e)
{
	if(S.top==S.base)
	 return ERROR;
	e=*(S.top-1);
	return OK;
}

Status Push(SqStack &S,SElemType e)
{
	if(S.top-S.base>=S.stacksize)
	{
	 S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
	 if(!S.base)
	  exit(OVERFLOW);
	 S.top=S.base +S.stacksize;
	 S.stacksize+=STACKINCREMENT;
	}
	*S.top++=e;
	return OK;
}

Status Pop(SqStack &S,SElemType &e)
{
	if(S.top==S.base)
	 return ERROR;
	e=*--S.top;
	return OK;
}
注释:&作为一元运算符,结果是右操作对象的地址。例如&x返回x的地址。
关于c语言中的malloc函数和realloc函数用于动态分配内存
 
关于栈应用的经典问题:
1.数制转换
2.括号匹配
3.迷宫求解
4. 表达式求值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值