如何分析旅游网站的购物功能以优化其在线购物体验?

摘要:旅游网站案例分析,购物网站建设ppt,做电影网站被找版权问题怎么处理,国内wordpress自己开发主题目录 一、用队列实现栈 二、 用栈实现队列 一、用队列实现栈 请你仅使用两个队列实现一个后入先出(LIFO
旅游网站案例分析,购物网站建设ppt,做电影网站被找版权问题怎么处理,国内wordpress自己开发主题目录 一、用队列实现栈 二、 用栈实现队列 一、用队列实现栈 请你仅使用两个队列实现一个后入先出#xff08;LIFO#xff09;的栈#xff0c;并支持普通栈的全部四种操作#xff08;push、top、pop 和 empty#xff09;。 实现 MyStack 类#xff1a; void push(int…目录 一、用队列实现栈 二、 用栈实现队列 一、用队列实现栈 请你仅使用两个队列实现一个后入先出LIFO的栈并支持普通栈的全部四种操作push、top、pop 和 empty。 实现 MyStack 类 void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int top() 返回栈顶元素。 boolean empty() 如果栈是空的返回 true 否则返回 false 。 注意 你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。 你所使用的语言也许不支持队列。 你可以使用 list 列表或者 deque双端队列来模拟一个队列 , 只要是标准的队列操作即可。 示例 输入 [MyStack, push, push, top, pop, empty] [[], [1], [2], [], [], []] 输出 [null, null, null, 2, 2, false] ​ 解释 MyStack myStack new MyStack(); myStack.push(1); myStack.push(2); myStack.top(); // 返回 2 myStack.pop(); // 返回 2 myStack.empty(); // 返回 False 提示 1 x 9 最多调用100 次 push、pop、top 和 empty 每次调用 pop 和 top 都保证栈不为空 进阶你能否仅用一个队列来实现栈。 代码实现 typedef struct {Queue q1;Queue q2; } MyStack;MyStack* myStackCreate() {MyStack* obj (MyStack*)malloc(sizeof(MyStack));if (NULL obj){perror(initialization failed!);exit(-1);}QueueInit(obj-q1);QueueInit(obj-q2);return obj; }bool myStackEmpty(MyStack* obj) {assert(obj);return QueueEmpty(obj-q1) QueueEmpty(obj-q2); }void myStackPush(MyStack* obj, int x) {assert(obj);// 让一个队列为空让另一个队列存储数据if (!QueueEmpty(obj-q1)){QueuePush(obj-q1, x);}else{QueuePush(obj-q2, x);} }int myStackPop(MyStack* obj) {assert(obj);assert(!myStackEmpty(obj)); // 前提是栈非空// 把非空队列前面的数据导入到另一个空队列中Queue* empty obj-q1;Queue* nonempty obj-q2;if (!QueueEmpty(obj-q1)){empty obj-q2;nonempty obj-q1;}while (nonempty-size 1){QueuePush(empty, QueueFront(nonempty));QueuePop(nonempty);}// 移除并返回栈顶元素int top QueueFront(nonempty);QueuePop(nonempty);return top; }int myStackTop(MyStack* obj) {assert(obj);assert(!myStackEmpty(obj)); // 前提是栈非空if (!QueueEmpty(obj-q1)){return QueueBack(obj-q1);}else{return QueueBack(obj-q2);} }void myStackFree(MyStack* obj) {assert(obj);QueueDestroy(obj-q1);QueueDestroy(obj-q2);free(obj);obj NULL; } (1条消息) 【数据结构第三章】- 队列_melonyzzZ的博客-CSDN博客 二、 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作push、pop、peek、empty 实现 MyQueue 类 void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开头的元素 boolean empty() 如果队列为空返回 true 否则返回 false 说明 你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。 你所使用的语言也许不支持栈。你可以使用 list 或者 deque双端队列来模拟一个栈只要是标准的栈操作即可。 示例 1 输入 [MyQueue, push, push, peek, pop, empty] [[], [1], [2], [], [], []] 输出 [null, null, null, 1, 1, false] ​ 解释 MyQueue myQueue new MyQueue(); myQueue.push(1); // queue is: [1] myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue) myQueue.peek(); // return 1 myQueue.pop(); // return 1, queue is [2] myQueue.empty(); // return false 提示 1 x 9 最多调用 100 次 push、pop、peek 和 empty 假设所有操作都是有效的 例如一个空的队列不会调用 pop 或者 peek 操作 进阶 你能否实现每个操作均摊时间复杂度为 O(1) 的队列换句话说执行 n 个操作的总时间复杂度为 O(n) 即使其中一个操作可能花费较长时间。 代码实现 typedef struct {Stack s1; // s1 用来入栈Stack s2; // s2 用来出栈 } MyQueue;MyQueue* myQueueCreate() {MyQueue* obj (MyQueue*)malloc(sizeof(MyQueue));if (NULL obj){perror(initialization failed!);exit(-1);}StackInit(obj-s1);StackInit(obj-s2);return obj; }bool myQueueEmpty(MyQueue* obj) {assert(obj);return StackEmpty(obj-s1) StackEmpty(obj-s2); }void myQueuePush(MyQueue* obj, int x) {assert(obj);StackPush(obj-s1, x); }int myQueuePeek(MyQueue* obj) {assert(obj);assert(!myQueueEmpty(obj)); // 前提是队列非空if (StackEmpty(obj-s2)){// 如果 s2 为空则需要将 s1 中的所有元素导入 s2 中while (!StackEmpty(obj-s1)){StackPush(obj-s2, StackTop(obj-s1));StackPop(obj-s1);}}return StackTop(obj-s2); }int myQueuePop(MyQueue* obj) {int front myQueuePeek(obj);StackPop(obj-s2);return front; }void myQueueFree(MyQueue* obj) {assert(obj);StackDestroy(obj-s1);StackDestroy(obj-s2);free(obj);obj NULL; } (1条消息) 【数据结构第三章】- 栈_melonyzzZ的博客-CSDN博客