线性表(数组) 通过下标查找方便
链表 空间分配灵活、插入删除操作方便 (重点!!!记下来)
使用指针与数字完成链表内容
输入数字组成链表
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef struct node{
int data;
int next;
}node;
node Lis[105]={0};
int main() {
int n,h=0,t=0;
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
Lis[x].data=x;
Lis[x].next=-1;
Lis[t].next=x;//基本操作
t=x;
}
int p=Lis[h].next;
while(p!=-1){
cout<<Lis[p].data<<" ";
p=Lis[p].next;
}
return 0;
}
输入其他组成链表
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef struct node{
char data;
int next;
}node;
node Lis[105]={0};
int main() {
int n,h=0,t=0;
Lis[h].next=-1;
cin>>n;
for(int i=1;i<=n;i++){
char x;
cin>>x;
Lis[i].data=x;
Lis[i].next=-1;
Lis[t].next=i;//与上面进行区分
t=i;
}
int p=Lis[h].next;
while(p!=-1){
cout<<Lis[p].data<<" ";
p=Lis[p].next;
}
return 0;
}
双链表模拟
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef struct node{
int data;
int next;
int pre;
}node;
node Lis[105]={0};
int main() {
int n;
int h=0,t=0;
Lis[h].pre=Lis[h].next=-1;
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
Lis[x].data=x;
Lis[x].pre=Lis[x].next=-1;
Lis[t].next=x;
Lis[x].pre=t;
t=Lis[t].next;//t=x;
}
int p=Lis[h].next;
while(p!=-1){
cout<<Lis[p].data<<" ";
p=Lis[p].next;
}
cout<<endl;
p=t;
while(p!=h){
cout<<Lis[p].data<<" ";
p=Lis[p].pre;
}
return 0;
}
队列
queue
先进先出
push()入队
emoty() 判断队列空 为空返回true 不为空返回false
front() 队首元素
pop() 出队
#include<iostream>
#include<cstdio>
#include<cstring>
#include <queue>
using namespace std;
int main() {
queue <int> Q;//创建队列方式
int n;
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
Q.push(x);//入队
}
while(!Q.empty()){//同上
int t=Q.front();//t为队列最前的
cout<<t<<" ";
Q.pop();//出队
}
return 0;
}