单向循环链表创建、遍历、插入、删除、查找(按位置,按元素值)、清空、销毁
来源:互联网 发布:室内设计前景知乎 编辑:程序博客网 时间:2024/06/05 11:37
SinglyLinkedCirculayList.h
#include "stdafx.h"#include "iostream"using namespace std;typedef struct LNode {int data;struct LNode *next;}LNode, *LinkedList;//创建链表bool createLinkedList(LinkedList &L, int i) {if (i < 1){cout << "输入不合法!" << endl;exit(EXIT_FAILURE);}L = (LinkedList)malloc(sizeof(LNode));if (!L){cout << "内存分配失败!" << endl;exit(EXIT_FAILURE);}LinkedList p, q;L->next = L;p = L;int j;for (j = 0; j < i; j++){q = (LinkedList)malloc(sizeof(LNode));if (!q){cout << "内存分配失败!" << endl;exit(EXIT_FAILURE);}cout << "请输入第" << j + 1 << "个元素:";cin >> q->data;p->next = q;q->next = L;p = q;}return true;}//获取链表的长度int getListLength(LinkedList &L) {if (L->next == L){cout << "链表为空" << endl;return 0;}LinkedList p;p = L;int j = 0;while (p->next != L){j++;p = p->next;}return j;}//打印链表void printLinkedList(LinkedList &L) {LinkedList p;p = L;if (L->next == L){cout << "链表为空!" << endl;exit(EXIT_FAILURE);}for (int i = 0; i < getListLength(L); i++){p = p->next;cout << p->data << " ";}cout << endl;}//在第i个位置之前插入元素bool insertListElem(LinkedList &L, int i, int num) {if (i<1 || i>getListLength(L)){cout << "输入不合法!" << endl;exit(EXIT_FAILURE);}LinkedList p, q;p = L;for (int j = 0; j < i - 1; j++) //定位到要插入结点的前一个{p = p->next;}q = (LinkedList)malloc(sizeof(LNode));if (!q){cout << "内存分配失败!" << endl;exit(EXIT_FAILURE);}q->data = num;q->next = p->next;p->next = q;return true;}//删除第i个元素bool deleteListElem(LinkedList &L, int i) {if (i<1 || i>getListLength(L)){cout << "输入不合法!" << endl;exit(EXIT_FAILURE);}LinkedList p,q;p = L;int j;for (j = 0; j < i - 1; j++) //定位到要删除的结点的前一个{p = p->next;}q = p->next;p->next = p->next->next;free(q);return true;}//查找并返回第i个位置的元素int getElem(LinkedList &L, int i) {if (i<1 || i>getListLength(L)){cout << "输入不合法!" << endl;exit(EXIT_FAILURE);}LinkedList p;p = L;int j;for (j = 0; j < i; j++){p = p->next;}return p->data;}//在链表中查找节点值等于num的位置,并返回int searchElem(LinkedList &L, int num) {LinkedList p;p = L->next;int j = 1;while ((p->data != num) && (j <= getListLength(L))){p = p->next;j++;}if (j <= getListLength(L)){return j;}else{cout << "查找无该值!" << endl;return false;}}//销毁链表bool destroylinkedlist(LinkedList &L) {LinkedList p, q;p = q = L->next;while (p != L){p = p->next;free(q);q = p;}free(L);return true;}//清空链表bool clearList(LinkedList &L) {LinkedList p, q;p =q= L->next;if (L == NULL){return false;}while (p != L){p = p->next;free(q);q = p;}L->next = L;return true;}
main.cpp
#include "stdafx.h"#include "SinglyLinkedCirculayList.h"int main(){LinkedList list1;int length;cout << "请输入要创建的链表的长度:";cin >> length;createLinkedList(list1, length);cout << "当前链表为:";printLinkedList(list1);int i, elem;cout << "要插入的位置为:";cin >> i;cout << "要插入的元素的大小为:";cin >> elem;insertListElem(list1,i,elem);cout << "当前链表为:";printLinkedList(list1);cout << "要删除的元素的位置为:";cin >> i;deleteListElem(list1,i);cout << "当前链表为:";printLinkedList(list1);cout << "要查找的元素位置为:";cin >> i;cout << "该位置元素的值为:";cout<<getElem(list1,i)<<endl;cout << "要查找的元素大小为:";cin >> elem;cout << "该元素所在的位置为:";cout << searchElem(list1,elem)<<endl;cout << "清空链表";clearList(list1);cout << "打印当前链表:";printLinkedList(list1);system("pause");return 0;}
阅读全文
0 0
- 单向循环链表创建、遍历、插入、删除、查找(按位置,按元素值)、清空、销毁
- 单向链表的创建、遍历、求长、判存、判空、插入、删除、查找(按位置或元素)、合并
- 双向循环链表的创建、插入、删除、求长、查询、打印、修改、清空、销毁
- 单向链表的操作:创建,删除,插入,销毁,查找
- 双向链表的创建、打印、求长、插入、删除、查值、清空、销毁
- 双向循环链表基本操作(初始化,插入,删除,清空,销毁,访问前驱,后继等)
- 双向循环链表基本操作(初始化,插入,删除,清空,销毁,访问前驱,后继等)
- C语言链表的创建、插入、查找、删除、清空操作
- c语言数据结构中循环队列操作,包括初始化,创建,清空销毁,增添,删除,求队长,遍历等等
- 两种方法实现单向链表的创建、遍历、删除、查找、逆序输出(循环法和递归法)
- 单向循环链表的创建/插入/删除/输出算法
- 数据结构(第二天)单向循环链表的创建,插入元素,(删除、查询元素跟单链表操作基本一致)
- c++之链表篇1:单向链表的创建,打印,删除,插入,销毁等基本操作
- 单向链表的相关操作(创建,遍历,插入,删除,逆置)
- 双向链表的功能实现:初始化,插入,按位置插入,按位置删除,按值删除,遍历打印等
- 数据结构 图 创建 插入 遍历 删除 销毁
- 数据结构中循环队列的清空、销毁、求队长、遍历、取首元素等操作及运用
- 单向循环链表(建表、插入、删除、输出)
- VB总结
- 【转载】VB百例知识总结(一)
- 用pickle模块储存对象的实例
- 【转载】我的超能力鼠标与键盘
- 【转载】快速打开软件
- 单向循环链表创建、遍历、插入、删除、查找(按位置,按元素值)、清空、销毁
- 【转载】一叶菩提-快捷键
- VB 中的基本数据类型
- 【转载】“路由器”让我很傲娇~
- 【转载】像乔布斯一样思考,像比尔盖茨一样行动
- 【转载】你不造的Diskpart磁盘管理命令
- 英语小结
- vb中窗体的常用属性及其功能
- 【转载】教你建一个别人打不开的文件夹