数据结构之单链表插入删除操作
程序员文章站
2022-03-22 20:00:29
...
#include<iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode *next;
}LNode;
void createListR(LNode *C, int a[], int n);//尾插法建立单链表
void createListF(LNode *C, int a[], int n);//头插法建立单链表
void traversal(LNode *C);
int getLength(LNode *C);
void deleteLNode(LNode *C,int n,int l);//删除第n项
void insertLNodeR(LNode *C, int n, int e,int l);//在第n处尾插法插入数字e
int main() {
LNode *C;
C = (LNode *)malloc(sizeof(LNode));//C为头指针,并且指向头结点
C->next = NULL;
int a[6] = { 1,2,3,4,5,6 };
/////////////创建单链表
createListF(C, a, 4);
traversal(C);
cout << "该单链表长度为:" << getLength(C) << endl;
////////////////插入
insertLNodeR(C, 3, 999, getLength(C));
traversal(C);
cout << "该单链表长度为:" << getLength(C) << endl;
////////////////删除
deleteLNode(C, 2, getLength(C));
traversal(C);
cout << "该单链表长度为:" << getLength(C) << endl;
///////////////
return 0;
}
void createListR(LNode *C, int a[], int n) {
LNode *s, *r;//s用来接收新结点,r用来始终指向终端结点
r = C;
for (int i = 0; i < n;++i) {
s = (LNode *)malloc(sizeof(LNode));
s->data = a[i];
//关键步骤
r->next = s;
r = r->next;//尾指针后移
//关键步骤
}
r->next = NULL;
}
void createListF(LNode *C, int a[], int n) {
LNode *s;
for (int i = 0; i < n; ++i) {
s = (LNode *)malloc(sizeof(LNode));
s->data = a[i];
//关键步骤
s->next = C->next;
C->next = s;
//关键步骤
}
}
void traversal(LNode *C) {
LNode *p;//用来指向头结点
p = C;
cout << "遍历结果为:";
while ( (p->next)!=NULL ){
p = p->next;//p指针后移
cout << p->data << " ";
}
cout << endl;
}
int getLength(LNode *C) {
LNode *p;
p = C;
int l = 0;
while ((p->next) != NULL) {
++l;
p = p->next;
}
return l;
}
void deleteLNode(LNode *C, int n,int l) {
LNode *p;
LNode *q;
p = C;
int m = 0;
p = C;
if (n<1 || n>l) {
cout << "没有该项数!" << endl;
}
else {
while (m<n-1) {
p = p->next;
++m;
}
//关键部分
q = p->next;
p->next=p->next->next;
//关键部分
cout << "删除第" << n << "个数字" << endl;
cout << "删除的数字是:" << q->data << endl;
}
}
void insertLNodeR(LNode *C, int n, int e, int l) {
LNode *p;
LNode *s;//接收新结点
s = (LNode *)malloc(sizeof(LNode));
s->data = e;
p = C;
int m = 0;
if (n<1 || n>l) {
cout << "插入位置不合法!" << endl;
}
else {
while (m<n ) {//若在插入位置之前插入数字,改为m<n-1
p = p->next;
++m;
}
s->next=p->next;
p->next = s;
}
cout << "在第" << n << "处后" << "插入数字" << e << endl;
}
上一篇: php该如何安装pdo_mysql扩展
下一篇: react swipe用法是什么
推荐阅读
-
线性表的链式存储结构:定义、单链表存储结构、给链表头结点分配空间、初始化链表数据、输出链表、在某个位置上插入数据、头插法、尾插法、删除某个位置上的数据、删除某个数据、删除整个链表计算链表的长度
-
在ASP.NET 2.0中操作数据之十六:概述插入、更新和删除数据
-
在ASP.NET 2.0中操作数据之四十七:用SqlDataSource控件插入、更新、删除数据
-
在ASP.NET 2.0中操作数据之十六:概述插入、更新和删除数据
-
在ASP.NET 2.0中操作数据之十七:研究插入、更新和删除的关联事件
-
在ASP.NET 2.0中操作数据之四十七:用SqlDataSource控件插入、更新、删除数据
-
链表的创建,插入,删除,输出基本操作
-
[PHP] 数据结构-链表创建-插入-删除-查找的PHP实现
-
数据结构之链表的插入操作
-
史上“最强”单链表实现(插入,删除,查找,求长...你想要的这里都有!)