数据结构基础之单链表
2020-07-14 04:50
47 查看
单链表的结构
//带头结点的单链表 typedef int elementType; typedef struct slNode{ elementType data; struct slNode *next; }node;
单链表的初始化
//初始化链表 void initialList(node *&L){ L = new node; L->next = NULL; }
求单链表的长度
//求链表长度的实现 int listLength(node *L){ int len = 0;//注意这里的len的初始值为0 node *p; p = L->next; while (p){ len++; p = p->next; } return len; }
按序号取元素的结点的实现
node* getElement(node*& L, int i){ int j = 1; node* p = L->next; while (j!=i && p!=NULL){ p = p->next; j++; } return p;//返回结果 //这里包括两种情况: //1、p!=NULL,即i没有超出范围,返回结点的位置 //2、p==NULL, 可能此时j==i或者j!=i, 都超过了范围,返回NULL //正好都可以用p来表示,所以用只要返回p即可 }
按值查询元素的实现
node* listLocate(node*& L, elementType x){ node* p = L->next; while (p->data != x && p != NULL){ p = p->next; } return p;//返回结果 //这里也有两种情况: //1、p == NULL, 即表中没有所查找的元素 //2、p != NULL, 即表中有所查找的元素 //正好都可以用p来表示,所以用只要返回p即可 }
插入算法的实现
bool listInsert(node*& L, int i, elementType x){ int j = 0; node* p, *s; p = L; //找到要插入位置的前一个结点 while (j!=i-1 && p != NULL){ j++; p = p->next; } if (p == NULL){ return false; //序号超出范围 } else{ s = new node; s->data = x; s->next = p->next; p->next = s; return true; } }
删除算法的实现
bool listDelete(node *&L, int i, elementType &x){ node*p, *s; int j; p = L; j = 0; while (j!=i-1 && p->next != NULL){ j++; p = p->next; } if (p->next == NULL){ return false; } else{ u = p->next; x = u->data; p = p->next; delete u; return true; } }
单链表的构建
//尾插法 //结束符控制创建结束 void createList(node *&L){ node *p, *u; elementType x; p = L; cout << "输入结点元素(输入9999退出)" << endl; cin >> x; while (x != 9999){ u = new node; u->data = x; u->next = NULL; p->next = u; p = u; cin >> x; } } //结点个数控制创建结束 void createList(node*& L){ int i = 0, n; node *p, *u; elementType x; cout << "输入元素的个数" << endl; cin >> n; cout << "输入元素: " << endl; cin >> x; while (i < n){ u = new node; u->data = x; u->next = NULL; p->next = u; p = u; cin >> x; } } //头插法 //结束符控制创建结束 void createList(node*& L){ node *p, *u; elementType x; p = L; cout << "输入结点元素(输入9999退出)" << endl; cin >> x; while (x != 9999){ u = new node; u->data = x; u = L->next; L->next = u; cin >> x; } } //结点个数控制创建结束 void createList(node*& L){ int i = 0, n; node *p, *u; elementType x; cout << "输入元素的个数" << endl; cin >> n; cout << "输入元素: " << endl; cin >> x; while (i < n){ u = new node; u->data = x; u = L->next; L->next = u; cin >> x; } }
单链表的销毁
void destroyList(node* & L) { node *p,*pTemp; p=L; while(p) { pTemp=p->next; delete(p); p=pTemp; } L=NULL; }
相关文章推荐
- 数据结构基础之单链表的应用(一)
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- hrbust 1547 基础数据结构——单链表(2)【水题-暴力预处理】
- 程序员面试宝典之数据结构基础----②单链表删除节点(读后)
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 数据结构基础(9) --单链表的设计与实现(2)之高级操作
- 数据结构基础(9) --单链表的设计与实现(2)之高级操作
- 数据结构基础(9) --单链表的设计与实现(2)之高级操作
- 数据结构基础(9) --单链表的设计与实现(2)之高级操作
- 二、数据结构基础之单链表C语言实现
- 程序员面试宝典之数据结构基础----单链表的逆序打印
- hrbust1546 基础数据结构——单链表(1)
- 数据结构基础系列——单链表的实现
- 程序员面试宝典之数据结构基础-----③单链表的插入
- Hrbust-1546-基础数据结构——单链表(1)【链表实现】
- 数据结构——单链表的创建、逆置、插入、有序表的建立、有序单链表合并等基础操作!!
- 二、数据结构基础之单链表C语言实现
- 数据结构基础之单链表
- 第十三章 数据结构基础--单链表