做网站推广的好处,全国为何又突然做核酸了,周口建设局网站,网站建设兼职招聘目录 一、队列的基本结构及其接口
二、我的栈的结构
三、 我的栈的创建及其初始化
四、我的栈的入栈
五、我的栈出栈
六、我的栈取栈顶元素 七、我的栈判空
八、我的栈销毁 一、队列的基本结构及其接口
typedef int QDataType;//队列的结构定义
typedef struct QueueNo…目录 一、队列的基本结构及其接口
二、我的栈的结构
三、 我的栈的创建及其初始化
四、我的栈的入栈
五、我的栈出栈
六、我的栈取栈顶元素 七、我的栈判空
八、我的栈销毁 一、队列的基本结构及其接口
typedef int QDataType;//队列的结构定义
typedef struct QueueNode{QDataType val;struct QueueNode *next;
}QNode;//用结构体管理队列
typedef struct Queue{QNode* phead;QNode* ptail;int size;
}Queue;//队列的初始化
void QueueInit(Queue* pq)
{pq-pheadNULL;pq-ptailNULL;pq-size0;
}//入队
void QueuePush(Queue *pq,QDataType x)
{assert(pq);QNode *newnode(QNode*)malloc(sizeof(QNode));if(newnodeNULL){perror(malloc fail);exit(-1);}newnode-valx;newnode-nextNULL;if(pq-pheadNULL)//队列为空pq-pheadpq-ptailnewnode;else{pq-ptail-nextnewnode;pq-ptailnewnode;}pq-size;
}//出队
void QueuePop(Queue* pq)
{assert(pq);assert(pq-phead);//空队列if(pq-pheadpq-ptail){pq-ptailNULL;}QNode* tmppq-phead;pq-pheadtmp-next;free(tmp);tmpNULL;pq-size--;
}//取队头元素
QDataType QueueFront(Queue* pq)
{assert(pq);assert(pq-phead);return pq-phead-val;
}//取队尾元素
QDataType QueueBack(Queue* pq)
{assert(pq);assert(pq-ptail);return pq-ptail-val;
}//判空
bool QueueEmpty(Queue *pq)
{assert(pq);return pq-pheadNULL;
}//销毁队列
void QueueDestroy(Queue* pq)
{assert(pq);QNode *curpq-phead;while(cur){QNode* tmpcur;curcur-next;free(tmp);tmpNULL;}pq-pheadpq-ptailNULL;pq-size0;
}
二、我的栈的结构
//我的栈结构
typedef struct {Queue q1;Queue q2;
} MyStack;三、 我的栈的创建及其初始化
//我的栈的创建及其初始化
MyStack* myStackCreate() {MyStack *ps(MyStack*)malloc(sizeof(MyStack));QueueInit(ps-q1);QueueInit(ps-q2);return ps;
}
四、我的栈的入栈
//我的栈入栈
void myStackPush(MyStack* obj, int x) {//利用假设法Queue *emptyobj-q1;Queue *noneemptyobj-q2;if(!QueueEmpty(obj-q1)){emptyobj-q2;noneemptyobj-q1;}QueuePush(noneempty,x);//QueuePush(obj-q1,x);
}
五、我的栈出栈
//我的栈出栈
int myStackPop(MyStack* obj) {//利用假设法Queue *emptyobj-q1;Queue *noneemptyobj-q2;if(!QueueEmpty(obj-q1)){emptyobj-q2;noneemptyobj-q1;}while(noneempty-size1){QueuePush(empty,QueueFront(noneempty));QueuePop(noneempty);}int stackpopQueueFront(noneempty);QueuePop(noneempty);return stackpop;
}六、我的栈取栈顶元素
//我的栈取栈顶元素
int myStackTop(MyStack* obj) {Queue* emptyobj-q1;Queue* noneemptyobj-q2;if(!QueueEmpty(obj-q1)){emptyobj-q2;noneemptyobj-q1;}return QueueBack(noneempty);
} 七、我的栈判空
//我的栈判空
bool myStackEmpty(MyStack* obj) {return QueueEmpty(obj-q1)QueueEmpty(obj-q2);
}
八、我的栈销毁
//我的栈销毁
void myStackFree(MyStack* obj) {QueueDestroy(obj-q1);QueueDestroy(obj-q2);free(obj);
}