链表的基本操作
来源:互联网 发布:unity3d模型资源百度云 编辑:程序博客网 时间:2024/06/06 20:16
链表的基本操作
定义单链表
typedef struct node{ int data; struct node *next;}SLink;
初始化链表
int initList(SLink *L){ L=(SLink*)malloc(sizeof(SLink));//创建头结点 if(L==NULL)//分配节点失败,返回flase return 0; L->next = NULL;//设置头结点指针为空 return 1;}
头插法建立链表
/*链表中数字顺序与数组中顺序相反 a[]={1,2,3,4,5} L->5->4->3->2->1*/void createList1(SLink *L,int a[],int n){ L = (SLink*)malloc(sizeof(SLink)); L->next = NULL; SLink *s; int i; for(i=0;i<n;i++) { s = (SLink*)malloc(sizeof(SLink));//该节点保存数组中数字 s->data = a[i]; s->next = L->next; L->next =s; }}
尾插法建立链表
/*链表与数组顺序相同*/void createList2(SLink *L,int a[],int n){ L=(SLink*)malloc(sizeof(SLink)); L->next = NULL; SLink *tc = L,*s; int i; for(i=0;i<n;i++) { s=(SLink*)malloc(sizeof(SLink)); s->data = a[i]; tc->next = s; tc = s; } tc->next = NULL;}
删除链表
void destroyList(SLink *L){ SLink *pre = L,*p = L->next; while(p!=NULL) { free(pre); pre = p; p = p->next; } free(pre);}
求链表的长度
int getLength(SLink *L){ if(L==NULL) return -1; int i=0; SLink *p = L->next; while(p!=NULL) { i++; p=p->next; } return i;}
求链表中第i个元素
int getElem(SLink *L,int i,int *e){ if(i<1)return -1;//参数i错误,返回-1 else { int j=1; SLink *p = L->next; while(p!=NULL&&j<i) { j++; p=p->next; } if(p==NULL) return 0;//未找到,则返回0 else { *e = p->data; return 1;//找到返回1 } }}
查找某值的位置
int locate(SLink *L,int m){ if(L==NULL) return -1;//如果链表为NULL 返回-1 else { int j=1; SLink *p = L->next; while(p!=NULL&&p->next!=m) { j++; p=p->next; } if(p==NULL) return 0;//未找到则返回0 else { return j;//找到返回位置 } }}
链表i位置插入元素
int insertList(SLink *L,int i,int m){ if(i<1) return -1;//参数i错误,返回-1 else { int j=0; SLink *p = L; while(p!=NULL&&j<i-1)//查找第i-1个节点 { j++; p=p->next; } if(p==NULL) return 0;//未找到,返回0 else { SLink *s = (SLink*)malloc(sizeof(SLink)); s->data = m; s->next = p->next;//将s节点插入到p节点之后 p->next = s; return 1;//插入成功返回1 } }}
删除元素运算算法
int delElem(SLink *L,int i){ if(L==NULL) return -1;//如果链表为NULL 返回-1 else { int j=0; SLink *p =L; while(p!=NULL&&j<i-1)//查找第i-1个节点 { j++; p=p->next; } if(p==NULL) return 0;//未找到第i-1个节点 else { SLink *q = p->next; if(q==NULL) return 0;//第i个节点不存在,则返回0 else { p->next = q->next;//删除第i个节点 free(q); return 1; } } }}
仓促之中,难免疏漏;如有错误,欢迎指正。
0 0
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- HDU2089不要62(数位DP入门)
- 关于数据库写入Emoji表情
- 蓝桥杯 算法训练 区间k大数查询(水)
- POJ3255次短路模板
- DevOps企业实践指南(1):DevOps能为我们带来什么
- 链表的基本操作
- configure intel C compiler / eclipse development environment
- 手机实现远程桌面控制
- 并查集解树的最近公共祖先问题
- 2016年度总结
- [POJ1961] Period
- 使用亚马逊云服务平台aws 搭建 shadowsocks
- LVS配置命令理解1
- Linux中环境变量文件及配置