C++实现线性链表的基本操作
来源:互联网 发布:淘宝国庆活动策划方案 编辑:程序博客网 时间:2024/06/17 23:24
不多说,接上一篇博客内容:C++实现顺序结构线性表的基本操作
ps:编程水平有限,高手请见谅。
以下是代码:
main.cpp
/* 内容:链表的基本操作 作者:Dreamer_zz 日期:2017/1/10*/#include<iostream>#include"student.h"using namespace std;int main(){ Student *head, *t; char num[10]; head = Creat(); cout << endl; Travel(head); cout << endl; t = new Student; cout << "请输入需要插入的同学的学号和成绩:" << endl; cin >> t->num >> t->score; head = InsertNode(head, t); Travel(head); cout << endl; cout << "请输入需要删除的同学的学号:" << endl; cin >> num; DeleteNode(head, num); Travel(head); cout << endl; ReleaseChain(head); system("pause"); return 0;}
student.h
/* 创建节点 */struct Student{ char num[10]; int score; Student *next; //存放下一个节点的地址};/* 创建一个链表 */Student *Creat();/* 遍历链表 */void Travel(Student *head);/* 在链表中插入一个节点 */Student *InsertNode(Student *head, Student *p);/* 删除链表中具有指定值的节点 */Student *DeleteNode(Student *head, char num[]);/* 释放链表 */void ReleaseChain(Student *head);
student.cpp
#include<iostream>#include"student.h"#include"string.h"using namespace std;/* 创建一个链表 */Student *Creat(){ Student *p, *q, *head; //p存放新节点地址,q存放上一个节点地址(当前链表的最后一个节点地址),head存放头节点地址 int i = 1, number; //number记录学生个数 cout << "请输入学生人数:" << endl; cin >> number; cout << endl; cout << "请按学号顺序输入各同学的学号和成绩" << endl; head = 0; q = 0;// 指针初始化 while (i <= number) { p = new Student; //创建一个新节点(空间大小为Student型占用的空间大小) cout << "请输入第" << i << "个学生的学号和成绩:" << endl; cin >> p->num; cin >> p->score; if (head == 0) //头节点为0,表示链表为空 { head = p; //将p设置为头节点的地址 q = p; //创建第一个节点时,q也指向头节点 } else //已有头节点,将新创建的节点p放在上一个节点q后面 { q->next = p; //新创建的节点放在q后面 q = p; //将q指向新链表的最后一个节点 } i++; //当前节点数加1 } q->next = 0; //最后一个节点的next成员为0 return(head);}/* 遍历链表 */void Travel(Student *head){ Student *p; int i = 1; p = head; //从头节点开始遍历 cout << "链表中数据如下:" << endl; while (p != 0) { cout << "第" << i << "个节点中的数据为:" << endl; cout << p->num << '\t' << p->score << endl; p = p->next; //让p指向下一个节点 i++; }}/* 在链表中插入一个节点 ,按学号升序*/Student *InsertNode(Student * head, Student *p){ Student *be, *ne; //存放所插入节点的前节点和后节点 if (head == 0) //链表为空 { head = p; p->next = 0; return head; } if (strcmp(head->num, p->num) >= 0) //新节点插在头节点位置 { p->next == head; head = p; return head; } be = ne = head; //初始化插入节点的前后节点 while (ne != 0 && (strcmp(ne->num, p->num) < 0)) //当插入节点的学号大于当前节点前不是尾节点时执行循环 { be = ne; ne = ne->next; } p->next = ne; be->next = p; return head;}/* 删除链表中具有指定值的节点 */Student *DeleteNode(Student *head, char num[]){ Student *be, *p; if (head == 0) { cout << "链表为空,无节点可删!" << endl; return head; } if (strcmp(head->num, num) == 0) //头节点为删除的节点 { p = head; head = head->next; //改变头节点 delete p; //从内存中删除p } else { be = p = head; while (strcmp(p->num, num) != 0 && p->next != 0) //如果不匹配,继续遍历节点 { be = p; p = p->next; } if (strcmp(p->num, num) == 0) //找到匹配节点 { be->next = p->next; delete p; cout << "删除了一个节点!" << endl; } else { cout << "未找到所要删除的节点!" << endl; } } return head;}/* 释放链表:将链表中所有节点从内存中删除 */void ReleaseChain(Student *head){ Student *p; while (head) //遍历所有节点 { p = head; head = head->next; delete p; }}
运行结果如下:
0 0
- 线性链表基本操作实现(C/C++)
- 数组实现的线性表基本操作[C]
- 顺序线性表的基本操作(C语言实现)
- C语言线性表的基本操作
- 线性表的基本操作和实现
- 线性表的基本实现与操作
- 线性表的实现及其基本操作
- 线性表的基本操作实现
- 线性表的基本操作实现(基于链表)
- C++实现线性链表的基本操作
- 【数据结构】双向循环线性表的基本操作--C++/C实现
- 【数据结构】双向循环线性表的基本操作--C++/C实现
- 数据结构C语言实现线性表(顺序实现)的初始化与基本操作
- 线性表实验实现基本操作(C语言版)
- 数组实现的线性表的基本操作2[C语言]
- C语言及程序设计提高例程-26 实现线性表基本操作的函数
- 第四周《C语言及程序设计》实践项目26 实现线性表基本操作的函数
- 实验一:线性表的基本操作实现及其应用(C++)
- 正确编译 DuiLib 静态库的方法
- dfs——一道好题(抓住剪枝)
- Jmeter(七)-参数化
- Unity3D将美术提供的图片当做字体使用(普通图片自动生成Custom font)
- MySQL插入数据时,中文乱码问题解决方法
- C++实现线性链表的基本操作
- Maven内置变量说明
- RESTful API 设计指南
- win10安装mysql
- jquery写插件(转载)
- android:clipChildren属性
- 如何删除HTML的span标签
- zookeeper闪退及报错
- 呵呵呵呵多线程