网站建设内容工作总结,如何进行电子商务网站推广?,wordpress calypso,可以做网站的电脑软件C数据结构算法篇Ⅰ #x1f4df;作者主页#xff1a;慢热的陕西人 #x1f334;专栏链接#xff1a;C算法 #x1f4e3;欢迎各位大佬#x1f44d;点赞#x1f525;关注#x1f693;收藏#xff0c;#x1f349;留言 主要内容讲解数据结构中的链表结构 文章目录 C数据…C数据结构算法篇Ⅰ 作者主页慢热的陕西人 专栏链接C算法 欢迎各位大佬点赞关注收藏留言 主要内容讲解数据结构中的链表结构 文章目录 C数据结构算法篇ⅠⅠ. 链表Ⅰ . Ⅰ 单链表Ⅰ. Ⅱ 双链表 Ⅰ. 链表
Ⅰ . Ⅰ 单链表 在C中我们用list来代替动态的链表但是new()申请动态内存是非常缓慢的。所以我们在竞赛中一般采用数组的方式模拟实现一种静态的链表 首先我们需要涉及到四个变量: //e[idx] --- 用来存储第idx个节点的值
//ne[idx] --- 用来存储第idx个节点的next指针
//idx --- 用来表示当前指向的是第idx个节点
//head --- 用来指向第一个节点所以如下我们实现一个例题 代码 #includeiostreamusing namespace std;#define N 100010int e[N];
int ne[N];
int x;
int idx;
int head;
char op;
int k;void init()
{//我们规定最后一个空节点的地址为-1head -1;idx 0;
}void add_to_head(int x)
{e[idx] x;ne[idx] head;head idx;
}void add(int k, int x)
{e[idx] x;ne[idx] ne[k];ne[k] idx;
}void remove(int k)
{ne[k] ne[ne[k]];
}int main()
{int m;cin m;init();while (m--){cin op;if (op H){cin x;add_to_head(x);}else if (op D){cin k;if (!k) head ne[head];remove(k - 1);}else{cin k x;add(k - 1, x);}}for (int i head; i ! -1; i ne[i]) cout e[i] ;cout endl;return 0;
}Ⅰ. Ⅱ 双链表 双链表的实现方式类似不过变量的参数有所变化 //l[idx] ---表示的是第idx个节点的左节点的地址
//r[idx] ---表示的是第idx个节点的有节点的地址
//e[idx] ---存储的是第idx个节点的值
//head ---存储的是头节点的地址
//tial ---存储的是尾节点的地址int idx, e[N], l[N], r[N];
int m, tail, head;void init()
{//起始规定0为head,1为tailr[0] 1, l[1] 0;idx 2;head 0, tail 1;
}//在下标为k的右边插入x
void addr(int k, int x)
{e[idx] x;r[idx] r[k];l[idx] k;r[k] idx;l[r[k]] idx;if (k tail) tail idx;idx;
}
//在下标为k的左边插入x
void addl(int k, int x)
{addr(l[k], x);if (k head) head idx;
}//删除第k个点
void remove(int k)
{r[l[k]] r[k];l[r[k]] l[k];
}//最右侧插入一个数
void addt(int x)
{addr(tail, x);
}//最左侧插入一个数
void addh(int x)
{addl(head, x);
}到这本篇博客的内容就到此结束了。 如果觉得本篇博客内容对你有所帮助的话可以点赞收藏顺便关注一下 如果文章内容有错误欢迎在评论区指正