c++,关于链表的常见操作

简介: c++,关于链表的常见操作

这是写给一些新人大学生的知识点,大神可以直接划走。

很多大学生上大学时候学数据结构会觉得很痛苦,主要原因就是链表没有学好。然后数据结构一大堆知识都是以链表为基础的。

现实工作中,链表也是内存中比较常见的数据存储方式。

```

typedef struct book

{

int num;

struct book *next;//指向结构体类型的指针

}Book;

```

首先链表的节点就必须有两部分组成,1就是数据,2就是指向下一个节点的指针。

```

Book *head,*q;

q=head;

if((head=(Book*)malloc(sizeof(Book)))==NULL)exit(1); //初始化头结点,head是一个结点但是没有存储数据

head->next=NULL;

```

有了上面的结构体为基础,我们直接就可以做一个链表头出来,直接用malloc动态生成就行,完了之后用head代表着玩意,然后head->next指向空就行了

```

for(i=0;i<10;i++)

{

ListInsert(head,i,i+1);

}

```

之后我们可以用一个循环,直接在head后面插入10个节点

```

int ListInsert(Book *head,int i,int x)

{

Book *p,*q;

int j;

p=head; // p指向首元节点

j=-1;

while(p->next!=NULL&&j<i-1)

{

p=p->next;

j++;

}

if((q=(Book*)malloc(sizeof(Book)))==NULL)exit(1);

 //为q申请内存空间

q->num=x;

q->next=p->next;

p->next=q;

return 1;

}

```

具体的插入函数如上面所示。其实总的就是断开两个节点间的连接,新生成一个节点,插进去就行了。

```

void DeleteList(Book *head,int n)

{

Book *p,*q;

p=head;

int count=0;

while(count<n-1)

{

count++;

p=p->next;

}

q=p->next;

p->next=q->next;

free(q);

q->next=NULL;

}

```

删除节点更简单,直接断开某个节点前后的两个节点,然后拼接上就行了。

```

void TraveList(Book *head)

{

Book *p;

int count=0;

p=head->next;

while(p->next!=NULL) //这样没有遍历完吧??

{

  count++;

  printf("%d\n",p->num);    

  p=p->next;

}

printf("Length is %d\n",count);

}

```

遍历节点就是用一个while循环,只要节点的next不为空,那就一直读下去。

像这样的链表操作,在我们的网络游戏中,也是这样操作的。

欢迎和我讨论有关程序的问题,也可以答疑。**关注公众号:诗一样的代码**,交一个朋友。

相关文章
|
6月前
|
C++ 容器
C++中向量的操作vector
C++中向量的操作vector
|
6月前
|
存储 C++
C++的list-map链表与映射表
```markdown C++ 中的`list`和`map`提供链表和映射表功能。`list`是双向链表,支持头尾插入删除(`push_front/push_back/pop_front/pop_back`),迭代器遍历及任意位置插入删除。`map`是键值对集合,自动按键排序,支持直接通过键来添加、修改和删除元素。两者均能使用范围for循环遍历,`map`的`count`函数用于统计键值出现次数。 ```
|
7月前
|
算法 前端开发 Linux
【常用技巧】C++ STL容器操作:6种常用场景算法
STL在Linux C++中使用的非常普遍,掌握并合适的使用各种容器至关重要!
101 10
|
7月前
|
C++ iOS开发 开发者
C++一分钟之-文件输入输出(I/O)操作
【6月更文挑战第24天】C++的文件I/O涉及`ifstream`, `ofstream`和`fstream`类,用于读写操作。常见问题包括未检查文件打开状态、忘记关闭文件、写入模式覆盖文件及字符编码不匹配。避免这些问题的方法有:检查`is_open()`、显式关闭文件或使用RAII、选择适当打开模式(如追加`ios::app`)以及处理字符编码。示例代码展示了读文件和追加写入文件的实践。理解这些要点能帮助编写更健壮的代码。
81 2
|
7月前
|
C++
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
|
7月前
|
存储 C++
C++的list-map链表与映射表
这篇教程介绍了C++中`list`链表和`map`映射表的基本使用。`list`链表可通过`push_front()`、`push_back()`、`pop_front()`和`pop_back()`进行元素的添加和删除,使用迭代器遍历并支持在任意位置插入或删除元素。`map`是一个键值对的集合,元素自动按键值排序,可使用下标操作符或`insert()`函数插入元素,通过迭代器遍历并修改键值对,同时提供`count()`方法统计键值出现次数。教程中包含多个示例代码以帮助理解和学习。
|
8月前
|
C++
在C和C++中,指针的算术操作
在C和C++中,指针的算术操作
|
7月前
|
算法 C++ 容器
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
319 0
|
8月前
|
算法 C++
c++算法学习笔记 (13) 链表
c++算法学习笔记 (13) 链表
|
7月前
|
C++ Python
UE C++ 链表
UE C++ 链表