栗子


私信TA

用户名:dotcpp0729093

访问量:541

签 名:

believe or not

等  级
排  名 641
经  验 4069
参赛次数 0
文章发表 14
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

#includeusing namespace std;
/*顺序栈*/
#define  MAXSIZE 100
/*如果是顺序栈,栈顶和栈底指针也可以用int型,通过下标定位*/
typedef struct 
{
	SElemType *base;//栈底指针 
	SElemType *top;//栈顶指针
	int StackSize; //栈的容量 
 }SqStack;
int InitStack(SqStack &S)
{
	S.base=new SElemType[MAXSIZE];//从栈底开始找,让其从栈顶出去
	if(!S.base)
	return 0;
	S.top=S.base;//初始化为空栈
	S.StackSize=MAXSIZE;//初始化栈容量 
	return 0; 
}
/*入栈*/
int Push(SqStack &S,int e)
{
	if(S.top-S.base==S.StackSize)//不确定这块指针相减的结果是否正确
	return 0;//栈满退出
	*S.top++=e;//从栈顶压入元素,移动栈顶指针 
	return 0; 
 } 
/*出栈*/
int Pop(SqStack &S,int &e)
{
	if(S.top==S.base)
	return 0;//栈空
	e=*--S.top;//进出栈都为栈顶
	return 0; 
 } 
/*取栈顶元素*///栈不删除元素 
int GetTop(SqStack &S)
{
	if(S.top==S.base)//栈非空
	return *(S.top-1); 
 } 
 
 
/*链栈*/
typedef struct StackNode
{
	int elem;
	struct StackNode *next;
 }StackNode,*LinkStack;//类似于链表的创建//其实就是链表完成另一种使用规则
 /*初始化栈链*/ 
int InitStack(LinkStack &S)//但是链栈的初始化只是构造一个空栈,不用设置头结点
{    S=NULL;
return 0;
 	
 } 
 /*入栈*/
int Push(LinkStack &S,int e)
{
	StackNode *p;//结点指针 
	p=new StackNode;//申请空间 
	p->elem=e;//赋值 
	p->next=S;//前插,但是是以倒着看的S为栈底 
	S=p;//将p的位置看做栈顶
	return 0; 
 }
 /*出栈*/
 int Pop(LinkStack &S,int &e)
 {
 	e=S->elem;
 	StackNode *p;
 	p=S;//p临时保存栈顶元素,以备释放 
 	S=S->next;//因为为前插,所以之前结点在指针位置的后面
	 delete p;
	 return 0;
  } 
/*取栈顶元素*/
int GetTop(LinkStack S)//INT 为要返回的元素的值的类型 
{
	if(S!=NULL)
	return S->elem;
 }


 

0.0分

0 人评分

  评论区

  • «
  • »