前言:之所以做这个模块,
是因为上课找到书上的bug跟老师说,老师平时分给我加了俩分(卷起来了),是因为热爱数据结构,喜欢实践书中的内容加深理解,以便找出bug再加平时分。下给出模板。
堆
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define SElemType int
#define Status int
#define OK 1
#define Error 0
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
SqStack S;
SElemType e;
Status Init_Stack(SqStack &S){
S.base=( SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)) ;
if(!S.base) return Error;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack &S,SElemType e){
if(S.top-S.base>=S.stacksize ){
S.base=( SElemType*)realloc(S.base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(SElemType));
if(!S.base) return Error;
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;//当前的top指向的是一个空位置
}
循环队列:
#include<stdio.h>
#include<stdlib.h>
#define MAXQSIZE 100
#define QElemType int
#define Status int
#define OK 1
#define Error 0
typedef struct{
QElemType *base;
int rear;
int front;
}SqQueue;
SqQueue Q;
QElemType e;
Status Init_Queue(SqQueue &Q){
Q.base=( QElemType*)malloc(MAXQSIZE*sizeof(QElemType)) ;
if(!Q.base) return Error;
Q.front=Q.rear=0;
return OK;
}
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;
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;
}