网站维护的页面,厦门免费网站建设,网站rss怎么做,创新的手机网站建设自己写的栈#xff0c;再让其他函数去调用自己写的栈 typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* next;//单链表QDataType data;//放数据
}QNode;typedef struct Queue
{QNode* phead;//头节点QNode* ptail;//尾节点QDataType size; //统计有多少节… 自己写的栈再让其他函数去调用自己写的栈 typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* next;//单链表QDataType data;//放数据
}QNode;typedef struct Queue
{QNode* phead;//头节点QNode* ptail;//尾节点QDataType size; //统计有多少节点
}Queue;void QueueInit(Queue *pq);//初始化
void QueueDestroy(Queue*pq);//销毁
void QueuePush(Queue*pq,QDataType x);//插入数据
void QueuePop(Queue* pq);//队头出数据就是删队头
QDataType QueueFront(Queue* pq);//返回对头数据
QDataType QueueBack(Queue* pq);//返回队尾数据
int QueueSize(Queue* pq);//返回总的数据个数
bool QueueEmpty(Queue* pq);//是空的返回真void QueueInit(Queue* pq)//初始化
{assert(pq);pq-phead NULL;pq-ptail NULL;pq-size 0;
}void QueueDestroy(Queue* pq)//销毁
{assert(pq);//第一个结构体QNode* cur pq-phead;while (cur){QNode* next cur-next;free(cur);cur next;}pq-phead NULL;pq-ptail NULL;pq-size 0;
}void QueuePush(Queue* pq, QDataType x)//插入数据
{ QNode* newnode (QNode*)malloc(sizeof(QNode));//扩大的是第一个结构体if (newnode NULL){perror(malloc);return;}newnode-data x;newnode-next NULL;if (pq-phead NULL){pq-phead pq-ptail newnode;}else{pq-ptail-next newnode;pq-ptail newnode;}pq-size;
}void QueuePop(Queue* pq)//队头出数据就是删队头
{assert(pq);assert(!QueueEmpty(pq));if (pq-phead-next NULL){free(pq-phead);pq-phead pq-ptail NULL;}else{QNode* next pq-phead-next;free(pq-phead);pq-phead next;}pq-size--;
}QDataType QueueFront(Queue* pq)//返回对头数据
{assert(pq);assert(!QueueEmpty(pq));return pq-phead-data;
}QDataType QueueBack(Queue* pq)//返回队尾数据
{assert(pq);assert(!QueueEmpty(pq));return pq-ptail-data;
}int QueueSize(Queue* pq)//返回总的数据个数
{assert(pq);return pq-size;
}bool QueueEmpty(Queue* pq)//是空的返回真
{assert(pq);return pq-phead NULL pq-ptail NULL;
} 1.一个结构体包含俩个队列 typedef struct {Queue q1;//第一个队列Queue q2;//第二个队列
} MyStack; 2.希望创造一个包含两个队列的结构体并且把这样的结构返回去通过MyStack结构体一把molloc两个队列结构体 MyStack* myStackCreate() {MyStack*obj (MyStack*)malloc(sizeof(MyStack));if(obj NULL){perror(molloc);}QueueInit(obj-q1);QueueInit(obj-q2);return obj;
} 3.插入数据q1队列有数据就进入if语句把新数据插入q1队列q1队列没数据就把新数据插入q2队列若是两个队列都是空就把新数据随便入一个队列 //插入数据
void myStackPush(MyStack* obj, int x) {if(!QueueEmpty(obj-q1)){QueuePush(obj-q1, x);}else{QueuePush(obj-q2, x); }
} 4.用两个队列像一个要像一个栈一样出数据取数据把q1队列的数据倒q2倒到了最后一个元素再去返回和删除元素 //移除并返回栈顶元素
int myStackPop(MyStack* obj) {//空数据队列Queue* PEmptyQ obj-q1;//有数据队列Queue* PNonEmptyQ obj-q2;//假设空数据和有数据队列假设赋值错了if(!QueueEmpty(obj-q1)){PEmptyQ obj-q2;PNonEmptyQ obj-q1;}//倒数据while(QueueSize(PNonEmptyQ) 1){QueuePush(PEmptyQ,QueueFront(PNonEmptyQ));QueuePop(PNonEmptyQ);}int top QueueFront(PNonEmptyQ);//调用了取对头数据函数QueuePop(PNonEmptyQ);//调用了删除队头数据函数return top;
} 5.返回栈顶数据就是返回队列的队尾数据 //取栈顶元素
int myStackTop(MyStack* obj) {if(!QueueEmpty(obj-q1)){return QueueBack(obj-q1);//调用了取队尾的数据的函数}else{return QueueBack(obj-q2);//调用了取队尾的数据的函数}
} 6.判创建的MyStack结构体q1和q2地址是不是空如果是空的则标题2创建结构体失败了molloc也失败了 bool myStackEmpty(MyStack* obj) {return QueueEmpty(obj-q1) QueueEmpty(obj-q2);
} 7.程序结束销毁所有建立的空间避免内存泄漏 //释放数据
void myStackFree(MyStack* obj) {QueueDestroy(obj-q1);QueueDestroy(obj-q2);free(obj);
}