C++实现链表

1.单向静态链表

const int N = 10000;
struct node {
    int id;
    int data;
    int nextid;
}nodes[N];

nodes[0].nextid = 1; //为next指针赋初值
for (int i = 1; i <= n; i ++) {
    nodes[i].id = i;
    nodes[i].nextid = i + 1;
} //为结点顺序赋值

/*nodes[n].nextid = 1;//定义为循环列表,尾指向头*/

//删除结点now
nodes[pre].nextid = nodes[now].nextid;
now = nodes[pre].nextid;

2.双向静态链表

const int N = 10000;
struct node {
    int id;
    int data;
    int preid;//NEW
    int nextid;
}nodes[N];

nodes[0].nextid = 1; //为next指针赋初值
nodes[1].preid = 0;//NEW
for (int i = 1; i <= n; i ++) {
    nodes[i].id = i;
    nodes[i].nextid = i + 1;
    nodes[i].preid = i - 1;//NEW
} //为结点顺序赋值

/*
nodes[n].nextid = 1;//定义为循环列表,尾指向头
nodes[1].preid = n;//NEW
*/

//删除结点now
prev = nodes[now].preid;
next = nodes[now].nextid;
nodes[prev].nextid = nodes[now].nextid;
nodes[next].preid = nodes[now].preid;
now = next;

3.STL实现链表

#include

//定义链表
listnode;
//为链表赋值
for(int i = 1; i <= n; i ++)
    node.push_back(i);
//从头到尾遍历链表
list::iterator it = node.begin();
while(node.size() > 1) {
    it ++;
    if (it == node.end())
        it = node.begin();
}
//删除一个结点
list::iterator next = ++ it;
if (next == node.end()) next = node.begin();//循环链表
node.erase(-- it);
it = next;

STL list更详细的介绍:【总结】C++ 基础数据结构 —— STL之链表(list)用法详解

你可能感兴趣的:(c++,链表)