博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构之链表
阅读量:2441 次
发布时间:2019-05-10

本文共 2791 字,大约阅读时间需要 9 分钟。

链表C++实现

创建链表时默认创建0号结点,也就是头结点。头结点指向的第一个结点为1号结点

Mycode:

#include 
#include
#include
#include
#include
using namespace std;//采用C++写法struct LNode{ int data; LNode *next; LNode(int x) : data(x), next(NULL) {} //结构体构造函数,用这种方式初始化更方便,new代替了malloc函数};LNode *CreateNode(void){ //LNode *Head = (LNode *)malloc(sizeof(LNode)); LNode *head = new LNode(0); //0号结点相当于头结点 LNode *p = head; LNode *node = NULL; int x; while(cin>>x){ if (!x) break; //输入0代表输入结束 node = new LNode(x); p->next = node; p = node; } p->next = NULL; return head;}void printLNode(LNode *head){ if (head->next == NULL){ //判断链表是否为空 cout << "Your LNode is empty" << endl; return; } LNode *p = head->next; int i = 1; while(p){ cout << "第" << i++ << "个元素为:" << p->data << endl; p = p->next; }}int getLength(LNode *head){ int l = 0; LNode *p = head->next; while(p){ p = p->next; l++; } return l;}int GetElem(LNode *L, int i, int &e){ //当第i个元素存在时,把它的值赋给e LNode *p = L->next; //初始化p指向第一个结点 int j = 1; while(p && j < i){ //使p指向第i个结点或p为空 p = p->next; j++; } if (!p || j >= i) return 0; //第i个元素不存在 e = p->data; return 1;}int ListInsert(LNode *head, int i, int e){ //在带头结点的单链表中第i个位置之前插入元素e LNode *p = head; int j = 0; while(p && j < i - 1){ //找到第i - 1个结点 p = p->next; j++; } if (!p || j >= i) return 0; //i<1 或 i>表长+1 LNode *s = new LNode(e); //生成新结点 s->next = p->next; p->next = s; return 1;}int ListDelete(LNode *head, int i, int &e){ //在带头结点的单链表中删除第i位元素,并返回到e LNode *p = head; int j = 0; while(p && j < i - 1){ //找到第i-1个结点 p = p->next; j++; } //cout << "j= " << j << endl; if (!p || j >= i) return 0; LNode *q = p->next; e = q->data; cout << e << endl; p->next = q->next; delete q; return 1;}int main(){ LNode *head = CreateNode(); cout << "输入的链表为:---------------" << endl; printLNode(head); cout << "-----------------------------" << endl; int l = getLength(head); cout << "链表的长度为" << l << endl; ListInsert(head, 9, 1000); cout << "-----------------------------" << endl; cout << "在第9个元素前插入1000后的链表:" << endl; cout << "链表长度为: " << getLength(head) << endl; printLNode(head); cout << "-----------------------------" << endl; int e, x; cout << "请输入要删除几号结点" << endl; cin >> x; ListDelete(head, x, e); cout << "删除后的链表为:" << endl; printLNode(head); return 0;}

运行结果:

1 2 3 4 5 6 7 8 9 10 0输入的链表为:---------------第1个元素为:1第2个元素为:2第3个元素为:3第4个元素为:4第5个元素为:5第6个元素为:6第7个元素为:7第8个元素为:8第9个元素为:9第10个元素为:10-----------------------------链表的长度为10-----------------------------在第9个元素前插入1000后的链表:链表长度为: 11第1个元素为:1第2个元素为:2第3个元素为:3第4个元素为:4第5个元素为:5第6个元素为:6第7个元素为:7第8个元素为:8第9个元素为:1000第10个元素为:9第11个元素为:10-----------------------------请输入要删除几号结点91000删除后的链表为:第1个元素为:1第2个元素为:2第3个元素为:3第4个元素为:4第5个元素为:5第6个元素为:6第7个元素为:7第8个元素为:8第9个元素为:9第10个元素为:10Hit any key to close this window...

转载地址:http://jefqb.baihongyu.com/

你可能感兴趣的文章
本站地图--程序员
查看>>
Markdown技巧
查看>>
Markdown入门3-链接、强调、代码、图片
查看>>
Markdown入门6-序列图
查看>>
SQLite的性能优化
查看>>
SQLite的并发处理
查看>>
cocos2d-x on wp8架构简介
查看>>
cocos2d-x中对象的位置,旋转,缩放
查看>>
cocos2d-x 的动画
查看>>
Camera相关技术
查看>>
.NET源码的内部排序实现
查看>>
.NET源码中的二分查找实现
查看>>
.NET源码中的链表
查看>>
单链表逆序
查看>>
二叉树遍历(层次,递归,非递归)
查看>>
判断单链表是否有环、找出两个单链表的交点
查看>>
Android Intent 简介
查看>>
Android Service 简介
查看>>
Windows Phone 8.1 App 图片资源需求列表
查看>>
.NET源码中的栈
查看>>