栈和队列类型定义及基本算法[1]
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
*S.top++=e;
return OK;
} //Push
出栈: Statuswenku.baidu.comPop(SqStack &S,SElemType &e) {
if(S.top==S.base) return ERROR; e=*--S.top;
return OK;
} //Pop
2、 链栈的类型定义 typedef struct LSNode {
p->data=e; p->next=top; top=p; }
出栈:// top 直接指向栈顶元素时的处理 ElemType Pop(LinkStack top) { if(top!=NULL)
{ p=top; top=top->next; e=p->data; free(p); return e;
return OK; }
出队: Status DeQueue(SqQueue &Q,QElemType &e) {
if(Q.front==Q.rear) return ERROR; e=Q.base[Q.front]; Q.front=(Q.front+1) % MAXQSIZE;
return OK; }
1、 顺序栈的类型定义 typedef struct {
SElemType *base; SElemType *top; int stacksize; }SqStack;
入栈: Status Push(SqStack &S,SElemType e) {
if(S.top-S.base>=S.stacksize) { // 栈满,追加存储空间 S.base=(ElemType)realloc(S.base, S.stacksize+STACKINCREMENT)*sizeof(ElemType)); if(!S.base) exit(OVERFLOW); //存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT;
2
ElemType data; struct LSNode *next; }LSNode,*LinkStack;
1
进栈:// top 直接指向栈顶元素时的处理 void Push(LinkStack top,ElemType e) { p=(LinkStack)malloc(sizeof(LSNode));
} }
3、 循环队列的类型定义 typedef struct {
QElemType *base; int front; int rear; }SqQueue;
入队: Status EnQueue(SqQueue &Q,QElemType e) {
if((Q.rear+1) % MAXQSIZE==Q.front) return ERROR; Q.base[Q.rear]=e; Q.rear=(Q.rear+1) % MAXQSIZE;
*S.top++=e;
return OK;
} //Push
出栈: Statuswenku.baidu.comPop(SqStack &S,SElemType &e) {
if(S.top==S.base) return ERROR; e=*--S.top;
return OK;
} //Pop
2、 链栈的类型定义 typedef struct LSNode {
p->data=e; p->next=top; top=p; }
出栈:// top 直接指向栈顶元素时的处理 ElemType Pop(LinkStack top) { if(top!=NULL)
{ p=top; top=top->next; e=p->data; free(p); return e;
return OK; }
出队: Status DeQueue(SqQueue &Q,QElemType &e) {
if(Q.front==Q.rear) return ERROR; e=Q.base[Q.front]; Q.front=(Q.front+1) % MAXQSIZE;
return OK; }
1、 顺序栈的类型定义 typedef struct {
SElemType *base; SElemType *top; int stacksize; }SqStack;
入栈: Status Push(SqStack &S,SElemType e) {
if(S.top-S.base>=S.stacksize) { // 栈满,追加存储空间 S.base=(ElemType)realloc(S.base, S.stacksize+STACKINCREMENT)*sizeof(ElemType)); if(!S.base) exit(OVERFLOW); //存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT;
2
ElemType data; struct LSNode *next; }LSNode,*LinkStack;
1
进栈:// top 直接指向栈顶元素时的处理 void Push(LinkStack top,ElemType e) { p=(LinkStack)malloc(sizeof(LSNode));
} }
3、 循环队列的类型定义 typedef struct {
QElemType *base; int front; int rear; }SqQueue;
入队: Status EnQueue(SqQueue &Q,QElemType e) {
if((Q.rear+1) % MAXQSIZE==Q.front) return ERROR; Q.base[Q.rear]=e; Q.rear=(Q.rear+1) % MAXQSIZE;