*单链表[带头结点]
2016-03-15 20:05
246 查看
基本结构
创建
插入与删除
遍历
销毁
基本结构:
创建
第一种:先初始化,再创建链表。在初始中,让头结点的next为NULL;
第二种:不初始化,直接创建,又分为以下几种。
<1>尾插法,假如创建n个结点。(从前往后建立结点,推荐!)
<2>头插法:不需要额外的指针、
插入和删除
插入:在第i个位置处插入数据,游标p移到第i-1个位置(也即待删元素左边),这个位置是关键!
删除:借助两个游标p,q,移动之后,q指向第i-1个位置(也就是待删元素左边的位置),p指向待删元素,(这两个位置很重要!)
遍历
销毁
依然是位置,q指向待销毁元素,p指向待销毁元素的下一个元素,即(p总提前于q)!
创建
插入与删除
遍历
销毁
基本结构:
typedef struct node { int data; struct node *next; }*List,Node;
创建
第一种:先初始化,再创建链表。在初始中,让头结点的next为NULL;
void Init(List &L) { L=(List)malloc(sizeof(Node)); if(!L) exit(-1); L->next=NULL; }
第二种:不初始化,直接创建,又分为以下几种。
<1>尾插法,假如创建n个结点。(从前往后建立结点,推荐!)
void creat(List &L,int n) /*尾插法*/ { int e,i; List p,s; L=(List)malloc(sizeof(Node)); p=L; for(i=0;i<n;i++) { s=(List)malloc(sizeof(Node)); cin>>e; s->data=e; p->next=s; p=s; } p->next=NULL; /*尾部指向空*/ }
<2>头插法:不需要额外的指针、
void creat(List &L,int n)/*头插法*/ { int e,i; List s; L=(List)malloc(sizeof(Node)); L->next=NULL; for(i=0;i<n;i++) { s=(List)malloc(sizeof(Node)); cin>>e; s->data=e; s->next=L->next; L->next=s; } }
插入和删除
插入:在第i个位置处插入数据,游标p移到第i-1个位置(也即待删元素左边),这个位置是关键!
int Insert(List &L,int i,int e) /*插入操作*/ /* 1<=i<=L->Length */ { int j=1; List p,s; p=L;/*指向第一个结点*/ while(p && j<i) /*移到i-1的位置处*/ { p=p->next; ++j; } if(!p || j>i) /*防止输入0或者大于结点的长度*/ return ERROR; s=(List)malloc(sizeof(Node)); s->data=e; s->next=p->next; p->next=s; return OK; }
删除:借助两个游标p,q,移动之后,q指向第i-1个位置(也就是待删元素左边的位置),p指向待删元素,(这两个位置很重要!)
int Delete(List &L,int i,int &e) /* 1<=i<=L->Length */ { int j=1; List p,q; q=L; while(q->next && j<i)/*防止删除长度越界*/ { q=q->next; ++j; } if(!(q->next) || j>i) return ERROR; p=q->next; e=p->data; q->next=p->next; free(p); return OK; }
遍历
void Traverse(List &L) { List p=L->next; while(p) { cout<<p->data; p=p->next; } }
销毁
依然是位置,q指向待销毁元素,p指向待销毁元素的下一个元素,即(p总提前于q)!
int Delete(List &L) { List p,q; q=L->next; while(q) { p=q->next; free(q); q=p; } L->next=NULL; return OK; }
相关文章推荐
- Sort Colors
- override和重载的区别
- 如何在 block 中修改外部变量
- About Zsh & Go2Shell & iTerm2
- 3-12,3-13考试总结
- java设计模式之 观察者模式
- Android Studio添加Parcelable序列化小工具(快速提高开发效率)
- HDU 1722 cake
- shell实现trim函数-去除字符串两侧的空格(包括tab,space键)
- C++静态成员
- Tip_glibc的几个有用的处理二进制位的内置函数
- android设计模式
- 第3周项目2-本月有几天
- Uva10048——Audiophobia
- Java 中泛型的全面解析(转)
- 关于数据库导出和导入sql备份文件
- Java集合类源码阅读
- integration by part in high dimension
- Android进程和线程的区别
- ORACLE 12C 导入9i导出的含有多个用户的dmp文件