带头结点的单链表总结
来源:互联网 发布:手机淘宝设置在哪 编辑:程序博客网 时间:2024/05/22 20:26
- 初始化
void InitList(LinkList &L){ L=(LinkList)malloc(sizeof(struct Lnode)); L->next=NULL;}
- 头插法
1.
void CreateListH(LinkList &L,int a[],int n){ LinkList s; int i; for (i = 0; i < n; i++) //将数据插入链表头(L)的后面 { s = (LinkList)malloc(sizeof(struct Lnode)); // L是 链表的头 s->next = NULL; s->data = a[i]; s->next = L->next; //即:s指向 L的 指向,L指向s; L->next = s; }}
2.
LinkList CreateListH(LinkList L,int a[],int n){ LinkList s; int i; for (i = 0; i < n; i++) //将数据插入链表头(L)的后面 { s = (LinkList)malloc(sizeof(struct Lnode)); // L是 链表的头 s->next = NULL; s->data = a[i]; s->next = L->next; //即:s指向 L的 指向,L指向s; L->next = s; } return L;}
分析:以上两个函数区别在于返回值不同,当无返回值时,建议用引用来随时更新链表状态;当有返回值时要返回后续需要的东西。
- 尾插法
void CreateListE(LinkList &L,int a[],int n){ LinkList s; LinkList r=L;//定义在尾部的指针 int i; for(i=0;i<n;i++) { s=(LinkList)malloc(sizeof(struct Lnode)); s->next=NULL; s->data=a[i]; r->next=s; r=s;//更新尾部指针 } r->next=NULL;//确定最后一个指针指向空}
- 插入新的结点
void ListInsert(LinkList &L,int i,int e){ int j=1; LinkList p=L; LinkList s; while(j<i && p!=NULL) { j++; p=p->next; } if(p==NULL) { cout<<"false"; } else { s=(LinkList)malloc(sizeof(LinkList)); s->data=e; s->next=p->next; p->next=s; }}
- 删除结点
void Listdelete(LinkList &L,int i){ int j; LinkList p=L; LinkList q; for(j=0;j<i-1;j++) //找到前一个结点 { p=p->next; } if(p==NULL) { cout<<"this LinkList is empty"<<endl; } else { q=p->next; //保留当前结点 if(q==NULL) { cout<<"this Linklist doesn't have "<<i<<" nodes"<<endl; } } p->next=q->next; delete(q);}
- 冒泡排序
void Listsort(LinkList &L,int n){ LinkList p=L->next; int temp; while(n>1) { while(p->next!=NULL) { if(p->data>p->next->data) { temp=p->data; p->data=p->next->data; p->next->data=temp; } p=p->next; } n--; p=L->next;//将指针重新返回到第一个节点; }}
测试代码
#include<iostream>#include<cstdio>#include<cstdlib>using namespace std;typedef struct Lnode //数据节点{ int data; struct Lnode *next;}*LinkList;//typedef struct Lnode* LinkList;void InitList(LinkList &L){ L=(LinkList)malloc(sizeof(struct Lnode)); L->next=NULL;}void CreateListH(LinkList &L,int a[],int n){ LinkList s; int i; for (i = 0; i < n; i++) //将数据插入链表头(L)的后面 { s = (LinkList)malloc(sizeof(struct Lnode)); // L是 链表的头 s->next = NULL; s->data = a[i]; s->next = L->next; //即:s指向 L的 指向,L指向s; L->next = s; }}void CreateListE(LinkList &L,int a[],int n){ LinkList s; LinkList r=L; int i; for(i=0;i<n;i++) { s=(LinkList)malloc(sizeof(struct Lnode)); s->next=NULL; s->data=a[i]; r->next=s; r=s; } r->next=NULL;}void cout1(LinkList L){ LinkList p=L->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; }}void ListInsert(LinkList &L,int i,int e){ int j=1; LinkList p=L; LinkList s; while(j<i && p!=NULL) { j++; p=p->next; } if(p==NULL) { cout<<"false"; } else { s=(LinkList)malloc(sizeof(LinkList)); s->data=e; s->next=p->next; p->next=s; }}void Listdelete(LinkList &L,int i){ int j; LinkList p=L; LinkList q; for(j=0;j<i-1;j++) { p=p->next; } if(p==NULL) { cout<<"this LinkList is empty"<<endl; } else { q=p->next; if(q==NULL) { cout<<"this Linklist doesn't have "<<i<<" nodes"<<endl; } } p->next=q->next; delete(q);}void Listsort(LinkList &L,int n){ LinkList p=L->next; int temp; while(n>1) { while(p->next!=NULL) { if(p->data>p->next->data) { temp=p->data; p->data=p->next->data; p->next->data=temp; } p=p->next; } n--; p=L->next;//将指针重新返回到第一个节点; }}int main(void){ int a[1000]; int i; int e; LinkList L; LinkList L1; int number; cout<<"please input a number:"; cin>>number; for(i=0;i<number;i++) { scanf("%d",&a[i]); } InitList(L); InitList(L1); CreateListH(L,a,number); cout1(L); Listsort(L,number); cout<<endl; cout1(L); CreateListE(L1,a,number); cout<<endl; cout1(L1); cout<<endl<<"please input a number:"; cin>>e; ListInsert(L,3,e); cout1(L); cout<<endl; Listdelete(L,4); cout1(L); return 0;}
阅读全文
0 0
- 带头结点的单链表总结
- 带头结点的单链表
- 带头结点的单链表
- 带头结点的单链表
- 带头结点的单链表的操作 学习总结
- 带头结点与不带头结点的单链表-LinkList
- 单链表的实现(带头结点)
- 单链表的实现(带头结点)
- 单链表的创建--带头结点
- 带头结点的单链表实现
- 不带头结点的单链表
- 不带头结点的单链表
- 带头结点单链表的建立
- 带头结点的循环单链表
- 不带头结点的单链表的建立
- 不带头结点的单链表的建立
- 带头结点的单链表的基本操作
- 带头结点的单链表的逆置
- C语言的枚举与宏定义
- Struts2配置详解
- 用Runtime实现KVO
- Softmax回归
- 2017年8月8日
- 带头结点的单链表总结
- Bootstrap个人笔记
- java可变参数函数
- css 浮动 相对定位 绝对定位区别
- Swift中的枚举enum
- Android ListView setEmptyView
- 实现String类
- RocketMQ源码深度解析五之Consumer篇
- dp动态规划入门基础技能点必备知识