作者:璨然2502869273 | 来源:互联网 | 2023-10-16 14:29
篇首语:本文由编程笔记#小编为大家整理,主要介绍了本科课程数据结构与算法实验2——单链表与双向循环链表的插入删除操作(C++实现)相关的知识,希望对你有一定的参考价值。
篇首语:本文由编程笔记#小编为大家整理,主要介绍了本科课程数据结构与算法实验2——单链表与双向循环链表的插入删除操作(C++实现)相关的知识,希望对你有一定的参考价值。
大家好,我是【1+1=王】, 热爱java的计算机(人工智能)渣硕研究生在读。
如果你也对java、人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!!
Good better best, never let it rest, until good is better, and better best.
近期会把自己本科阶段的一些课程设计、实验报告等分享出来,供大家参考,希望对大家有帮助。
博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html
一、 实验目的
- 掌握线性表的链表表示;
- 实现单链表的插入操作
- 实现单链表的删除操作
- 实现双向链表的插入操作
- 实现双向链表的删除操作
二、 实验内容
1. 实验任务
a. 完成单链表的建立、插入和删除
b. 完成双向链表的建立、插入和删除
2. 程序设计
1) 数据输入(输入哪些数据、个数、类型、来源、输入方式)
节点个数:count;
节点元素值:temp;
要插入节点的位置和数值:num1、Data;
要删除节点的位置:num2;
2) 数据存储(输入数据在内存中的存储)
动态分配内存(pNode pNew = (pNode)malloc(sizeof(Node));)
3) 数据处理(说明处理步骤。若不是非常简单,需要绘制流程图)
4) 数据输出(贴图:程序运行结果截图。图幅大小适当,不能太大)
三、 实验环境
- 操作系统:WINDOWS 10
- 开发工具:VC++ 2013
- 实验设备:PC
四、源代码
1. 单链表的插入删除操作
- pNode CreatList(); //创建链表函数
- void TravelseList(pNode); //遍历链表函数
- bool Insert_Node(pNode, int, int); //插入节点
- int Del_Node(pNode, int); //删除节点
#include<iostream>
using namespace std;
typedef struct node
int data;
struct node *pNext;
Node, *pNode;
pNode CreatList();
void TravelseList(pNode);
bool Insert_Node(pNode, int, int);
int Del_Node(pNode, int);
int main()
pNode pHead &#61; NULL;
int Data;
int num;
pHead &#61; CreatList();
TravelseList(pHead);
cout << "输入要插入的位置和数据&#xff1a;";
cin >> num >> Data;
Insert_Node(pHead, num, Data);
TravelseList(pHead);
cout << "输入要删除的位置&#xff1a;";
cin >> num;
Del_Node(pHead, num);
TravelseList(pHead);
system("pause");
return 0;
pNode CreatList()
int count;
int temp;
pNode pHead &#61; (pNode)malloc(sizeof(Node));
pNode pTail &#61; pHead;
pTail->pNext &#61; NULL;
cout << "输入节点个数" << endl;
cin >> count;
for (int i &#61; 0; i < count; i&#43;&#43;)
cout << "输入第" << i &#43; 1 << "个节点的数值" << endl;
cin >> temp;
pNode pNew &#61; (pNode)malloc(sizeof(Node));
pNew->data &#61; temp;
pTail->pNext &#61; pNew;
pNew->pNext &#61; NULL;
pTail &#61; pNew;
return pHead;
void TravelseList(pNode pHead)
cout << "链表的数据如下&#xff1a;";
pNode p &#61; pHead->pNext;
while (p !&#61; NULL)
cout << p->data << " ";
p &#61; p->pNext;
cout << endl;
return;
bool Insert_Node(pNode pHead, int front, int Data)
int i &#61; 0;
pNode _node &#61; pHead;
pNode pSwap;
if ((front < 1) && (_node !&#61; NULL))
return false;
while (i < front - 1)
_node &#61; _node->pNext;
&#43;&#43;i;
pNode pNew &#61; (pNode)malloc(sizeof(Node));
pNew->data &#61; Data;
pSwap &#61; _node->pNext;
pNew &#61; _node->pNext;
pSwap &#61; pNew->pNext;
return true;
int Del_Node(pNode pHead, int back)
int i &#61; 0;
int Data;
pNode _node &#61; pHead;
pNode pSwap;
if ((back < 1) && (NULL &#61;&#61; _node->pNext))
printf("删除失败&#xff01;\\n");
return 0;
while (i < back - 1)
_node &#61; _node->pNext;
&#43;&#43;i;
pSwap &#61; _node->pNext;
Data &#61; pSwap->data;
_node->pNext &#61; _node->pNext->pNext;
free(pSwap);
return Data;
2. 双向循环链表的插入删除操作
头文件
#ifndef _DOUBLELINKLIST_H_
#define _DOUBLELINKLIST_H_
#include <stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct DuLNode
ElemType data;
struct DuLNode* prior;
struct DuLNode* next;
DuLinkList;
int InsertBefore(DuLinkList* pListHead, int i, ElemType Elem);
int Delete(DuLinkList* pListHead, int i, ElemType* pElem);
#endif
cpp文件
#include "DoubleLinkList.h"
#include
using namespace std;
int main(int argc, char* argv[])
int i;
ElemType Elem;
DuLinkList* pListHead;
DuLinkList* pListNode;
pListHead &#61; (DuLinkList*)malloc(sizeof(DuLinkList));
pListHead->prior &#61; pListHead;
pListHead->next &#61; pListHead;
for (i &#61; 8; i>0; i--)
pListNode &#61; (DuLinkList*)malloc(sizeof(DuLinkList));
pListNode->data &#61; i;
pListNode->next &#61; pListHead->next;
pListNode->prior &#61; pListHead;
pListHead->next->prior &#61; pListNode;
pListHead->next &#61; pListNode;
InsertBefore(pListHead, 3, 88);
InsertBefore(pListHead, 20, 15);
Delete(pListHead, 3, &Elem);
Delete(pListHead, 20, &Elem);
while (pListHead->next !&#61; pListHead)
pListNode &#61; pListHead->next;
pListHead->next &#61; pListNode->next;
pListNode->next->prior &#61; pListHead;
free(pListNode);
free(pListHead);
return 0;
int InsertBefore(DuLinkList* pListHead, int i, ElemType Elem)
DuLinkList* pListNode&#61;NULL;
if (i <&#61; 0 && i > 8)
cout << "插入非法" << endl;
else
DuLinkList* s &#61; (DuLinkList*)malloc(sizeof(DuLNode));
s->data &#61; Elem;
s->prior &#61; pListNode->prior;
pListNode->prior->next &#61; s;
s->next &#61; pListNode;
pListNode->prior &#61; s;
return 0;
int Delete(DuLinkList* pListHead, int i, ElemType* pElem)
DuLinkList* pListNode;
if (i <&#61; 0 && i > 8)
cout << "插入非法" << endl;
else
pElem &#61; pListNode->data;
pListNode->prior->next &#61; pListNode->next;
pListNode->next->prior &#61; pListNode->prior;
free(pListNode);
return 0;
博客更新至专栏【课程设计实验报告】&#xff1a;https://blog.csdn.net/weixin_43598687/category_11640051.html