一、知识点
写在前面:
1.1栈的链表实现
#include <iostream>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
struct listNode{
int data;
listNode* next;
};
struct mystack{
listNode* top;
listNode* bottom;
};
//创建空栈
mystack* creatStack(){
mystack* st = new mystack;
st->top = st->bottom = nullptr;
return st;
}
//压栈
void push(int x,mystack* st){
listNode* node = new listNode;
node->data = x;
node->next = st->top;
st->top = node;
}
//出栈
void pop(mystack* st){
if(st->top != st->bottom){
cout << "pop:" << st->top->data << endl;
st->top = st->top->next;
}
}
void display(mystack* st){
//为了方便操作以及不改变原来的数据(即st->top),我们定义一个node
listNode* node = new listNode;
node = st->top;
while(node != st->bottom){
cout << node->data << endl;
node = node->next;
}
free(node);
}
int main(){
mystack* st = creatStack();
for(int i = 0;i < 5;i++){
push(i,st);
}
display(st);
pop(st);
display(st);
}
1.2 队列的链表实现
#include <iostream>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
struct listNode{
int data;
listNode* next;
};
struct myqueue{
listNode* front;
listNode* rear;
};
//创建空队列
myqueue* creatQueue(){
myqueue* que = new myqueue;
que->front = que->rear = nullptr;
return que;
}
//入队
void push(int x,myqueue* que){
listNode* node = new listNode;
node->data = x;
node->next = nullptr;
//把node与上一个node联系上
if(que->rear != nullptr){
que->rear->next = node;
que->rear = node;
}else{
//这个语句块的意义在于,对于第一个节点,你得让que和第一个node联系起来。这可和stack不一样。
que->front = que->rear = node;
}
}
//出队
void pop(myqueue* que){
listNode* p = que->front;//方便待会释放
if(que->rear == que->front){
cout << "队列为空,无法出队" << endl;
que->rear = que->front = nullptr;
free(p);
}else{
que->front = que->front->next;
free(p);
}
}
//展示
void display(myqueue* que){
listNode* node = que->front;
if(node == nullptr)return;
while(node != nullptr){
cout << node->data << endl;
node = node->next;
}
}
int main(){
myqueue* que = creatQueue();
for(int i = 0;i < 5;i++){
push(i,que);
}
display(que);
pop(que);
cout << "--------" << endl;
display(que);
}
二、编程题
2.1第一轮(易)
剑指 Offer 09用两个栈实现队列
#1047删除字符串中的所有相邻重复项
#682棒球比赛
#496下一个更大元素 I
#1598文件夹操作日志搜集器