限定仅在表尾进行插入或删除的,后进先出的线性表
base:栈底指针,始终指向栈底位置。若base=NULL,表明栈结构不存在。
top:栈顶指针,初值指向栈底。插入新元素时top+1,删除元素时top-1.。
空栈时,top与base的值相等,均指向栈底;非空时top始终指向栈顶元素的上一个位置。
#define MAXSIZE 100;
typedef struct
{SElemType *base;
SElemType *top;
int stacksize; //栈可用的大容量
}SqStack;
初始化Status InitStack(SqStack &S)
{S.base=new SElemType[MAXSIZE]; //为顺序栈分配一个大容量为MAXSIZE的数组空间
if(!S=base) exit(OVERFLOW); //存储分配失败
S.top = S.base;
S.stacksize=MAXSIZE;
return OK;
}
入栈Status Push(SqStack &S,SElemType e)
{if(S.top-S.base==S.stacksize) return ERROR;
*S.top++=e; //*S.top=e;S.top++;
return OK;
}
出栈Status Pop(SqStack &S,SElemType e)
{if(S.top==S.base) return ERROR;
e=*--S.top;
return OK;
}
取栈顶元素SElemType GetTop(SqStack S)
{if(S.top==S.base)
return *(S.top-1);
}
销毁void DestroyStack(SqStack &S)
{delete []S.base;
S.stacksize=0;
S.base=S.top=NULL;
}
链栈注:链栈中一般不设置头结点
定义typedef struct Node
{SElemType data;
struct Node *next;
}Node,*LinkStack;
初始化Status InitStack(LinkStack &S) //S:栈顶指针
{S==NULL;
return OK;
}
栈空bool StackEmpty(LinkStack S)
{return (S==NULL);
栈长int StackLength(LinkStack S)
{for(i=0,p=S;p;i++,p=p->next);
return i;
}
取栈顶元素Status GetTop(LinkStack S,SElemType &e)
{if(S==NULL) return ERROR;
e=S->data;
return OK;
}
出栈Status Pop(LinkStack &S,SElemType e)
{if(S==NULL) return ERROR;
e=S->data;
p=S;
S=S->next;
delete p;
return OK;
}
入栈Status Push(LinkStack &S,SElemType e)
{p=new StackNode;
p->data=e;
p->next=S;
S=p;
return OK;
}
队列
定义以及队列仅允许在表的一端进行插入(队尾),在另一端进行删除的(队头),先进先出的线性表
void conversion(int N,int r){InitStack(S);
while(N)
{Push(S,N%r);
N=N/r;
}
while(!StackEmpty(S)){Pop(S,e);
if(e<10)printf("%d",e);
else printf("%c",'A'+e-10);
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款