单链表的实现-功能完善
来源:互联网 发布:杭州电魂网络 编辑:程序博客网 时间:2024/05/21 22:58
初学数据结构和算法,使用的c++语言。
单链表的实现,主要是在尾指针那块卡了一下下,尾指针的操作还是要仔细,否则指向不明内存,引发程序崩溃。
希望对初学者有点用,主要还是自己加深印象。
//单链表#include <iostream>#include <MATH.H>#define OK 1#define ERROR -1using namespace std;//链表存储结构typedef struct node{int data; //数据域struct node* p_next; //指针域}node,*Linklist;Linklist p_head; //头指针//初始化链表void InitList(Linklist & L){L = new node;if(!L)exit(OVERFLOW);L->p_next =NULL;}//链表长度int Linklistlen(Linklist L){node * p = L->p_next;int len = 0;while(p!=NULL){len++;p = p->p_next;}return len;}//按序号查找node* InSearch_Pos(Linklist L,int pos) //传入要查在的位置序号{node * p =L->p_next;int count = 1;while(p!=NULL && count<pos){count++;p = p->p_next;}if( pos == count)return p;elsereturn NULL;}//按值查找node* InSearch_Data(Linklist L,int data) //传入要查找的值{node * p ;p = L->p_next;while(p!=NULL&&p->data!=data)p = p->p_next;if(p!=NULL&&p->data == data)return p;elsereturn NULL;}//插入操作int LinkInsert(Linklist & L, int data, int pos) //插入数据到链表的指定位置{node * p , * s;p = InSearch_Pos(L,pos-1); //找到要插入位置的前一个位置if(p==NULL)return ERROR;s = new node;if(s == NULL)return ERROR;s->data = data;s->p_next = p->p_next; //插入新节点,注意顺序,小心链表断掉p->p_next = s;return OK;}//删除操作int LinkDelete(Linklist & L, int pos){node * p = InSearch_Pos(L,pos-1);if(p==NULL)return ERROR;node * q = p->p_next;p->p_next = q->p_next;delete q;q = NULL; //防止内存泄漏return OK;}//销毁链表void LinkDestroy(Linklist & L){node * p;while(L->p_next!=NULL){p = L->p_next;L->p_next = p->p_next;delete p;p = NULL;}}//显示链表void LinkShow(Linklist L){node * p ;// while(p!=NULL) // {// cout<<p->data<<" ";// p = p->p_next;// }for(p = L->p_next; p!=NULL ;p =p->p_next)cout<<p->data <<" ";cout <<endl;}//头插法void Add_head(Linklist &L,int data){node * p;p = new node;p->data = data;p->p_next = L->p_next;L->p_next = p;}//尾插法void Add_tail(Linklist &L, int data) //每次输入一个数据,传入{node * p , * r;r = L;p = new node;p->data = data;p->p_next = NULL;while(r->p_next) //循环找到链表尾部r= r->p_next;r->p_next = p;}// void Add_tail(Linklist &L, int n) //每次输入n个数据,键盘输入// {// node * p, * r;// r = L;// for(int i = 0; i<n ; i++)// {// p = new node;// cout << "请输入数据:";// cin >> p->data;// p->p_next = NULL; // r->p_next = p;// r = p; //尾指针指向链表尾端// }// }int main(){cout << "\t - - - - - -测试 - - - - - -"<< endl;InitList(p_head);cout << "采用头插法为空表添加5个值."<<endl;Add_head(p_head,1);Add_head(p_head,2);Add_head(p_head,3);Add_head(p_head,4);Add_head(p_head,5);cout <<"插入前链表为:"<<endl;;LinkShow(p_head);cout <<"在第二个位置和第四个位置插入两个数据10和11:" <<endl;LinkInsert(p_head,10,2);LinkInsert(p_head,11,4);LinkShow(p_head);cout << "此时链表的长度为:";cout << Linklistlen(p_head)<<endl;cout <<"- - - - - - - - - - - - - - - - - - - -"<<endl;cout << "采用尾插法为已有链表增加两个值6和7:"<<endl;Add_tail(p_head,6);Add_tail(p_head,7);LinkShow(p_head);cout << "此时链表的长度为:";cout << Linklistlen(p_head)<<endl;return 0;}
1 0
- 单链表的实现-功能完善
- jplayer 实现的在线音乐播放器,功能完善中
- 功能最完善的uboot
- MFC-实现计算机完善(+-*/%的完善)
- 功能完善
- 关于实现和完善志愿者管理系统的几个功能的问题
- 基于Struts2和Android的简单登陆注册功能的设计与实现(待完善)
- Android应用程序开发教程:实现一个功能比较完善的登录对话框
- 使用javascript实现多个图片漂浮的效果(完善火狐滤镜功能)
- android实现按钮拖动效果及路径的绘制等2D绘图功能---待完善
- 模块管理常规功能自定义系统的设计与实现(15--进一步完善"省份"模块)
- servlet实现的一个购物车展示功能,待完善(添加,删除购物车等操作)
- 实现带header和footer功能的RecyclerView——完善篇
- 完善你的Blog功能(一)
- 功能完善的即时通讯+视频会议源码
- 完善treeview控件的数据绑定功能
- 完善discuz的@圈人功能
- dedecms独立模型分页功能的完善
- cocos2dx 2.2.5 一键创建工程批处理
- opencv+CUDA编程的一些问题
- NGUI之UISprite
- 华为面试吐槽
- java 中静态方法
- 单链表的实现-功能完善
- C++学习之重复定义的错误
- Java学习笔记之单例模式
- SVG绘图技术
- poj 3468A Simple Problem with Integers
- nopcommerce 电商商城 ASP.NET 开源系统
- Cloudera Manager5之安装部署CDH5.X
- 《从0到1》笔记 第九章 基础决定命运
- java笔记