数据结构——线性表中的算法
2017-09-16 17:10
295 查看
循环右移算法:
把数组A看作数组ab,要得到数组ba,可以先将a,b分别转置得到数组B=a(-1)b(-1),再将B转制得到B(-1)=ba;
删除所有元素值为x的元素(要求空间复杂度为o(1)):
从头开始遍历,用一个变量k来记录已经扫描到的值为x元素的个数,当扫描到的元素值不为x时,将此元素向前移动k位,当扫描到值为x的元素时,k++。
实现单链表就地逆置:
1.通过修改指针实现
void reserve2(Node *first)//first是指向头结点的头指针
{
p=first->next;//p是工作节点
pre=NULL;//pre保存p的前驱结点 因为需要把p的指针指向p的前驱结点
while(p!=NULL)
{
r=p->next;//r保存p的后驱节点 因为对p的数据域中的指针作出修改后 p的后驱节点会遗失
p->next=pre;
pre=p;
p=r;
}
first->nest=pre;
}2.通过头插法实现
void reserve3(Node *first)//first是指向头结点的头指针
{
p=first->next;//预置工作节点
first->next=NULL;//原表的头结点作为新表的头结点
while(p)
{
u=p->next;//暂存p的后继节点
p->next=first->next;//把p插到头结点之后
first->next=p;//让头结点指向p
p=u; //更新p为下一个输入节点
}
}
把数组A看作数组ab,要得到数组ba,可以先将a,b分别转置得到数组B=a(-1)b(-1),再将B转制得到B(-1)=ba;
void Reverse(char A,int from,int to) { for(int i=0;i<(to-from+1)/2;i++) { char t; t=A[from+i]; A[from+i]=A[to-i]; A[to-i]=t; } } void Converse(char A[],int n,int k) { Reverse(A,0,k-1); Reverse(A,k,n-1); Reverse(A,0,n-1); }
删除所有元素值为x的元素(要求空间复杂度为o(1)):
从头开始遍历,用一个变量k来记录已经扫描到的值为x元素的个数,当扫描到的元素值不为x时,将此元素向前移动k位,当扫描到值为x的元素时,k++。
void deleteAllx(Seqlist L,int x) { k=0; for(int i=0;i<L.length;i++) { if(L.data[i]==x) k++; else L.data[i-k]=L.data[i]; } L.length=L.length-k; }
实现单链表就地逆置:
1.通过修改指针实现
void reserve2(Node *first)//first是指向头结点的头指针
{
p=first->next;//p是工作节点
pre=NULL;//pre保存p的前驱结点 因为需要把p的指针指向p的前驱结点
while(p!=NULL)
{
r=p->next;//r保存p的后驱节点 因为对p的数据域中的指针作出修改后 p的后驱节点会遗失
p->next=pre;
pre=p;
p=r;
}
first->nest=pre;
}2.通过头插法实现
void reserve3(Node *first)//first是指向头结点的头指针
{
p=first->next;//预置工作节点
first->next=NULL;//原表的头结点作为新表的头结点
while(p)
{
u=p->next;//暂存p的后继节点
p->next=first->next;//把p插到头结点之后
first->next=p;//让头结点指向p
p=u; //更新p为下一个输入节点
}
}
相关文章推荐
- 数据结构与算法——线性表(一)
- [数据结构与算法] 3,线性表
- 【数据结构与算法】线性表备忘
- 再回首,数据结构——线性表、链表上的常见算法
- 数据结构之算法2.6-在顺序线性表L中查找第1个值与e满足compare()的元素的位序
- 数据结构与算法——线性表链式存储(单循环链表)
- 数据结构与算法--线性表
- 数据结构与算法——线性表链式存储(单链表)
- 数据结构和算法 (二)数据结构基础、线性表、栈和队列、数组和字符串
- Uva 算法入门经典(数据结构基础)线性表题目
- 数据结构与算法---线性表
- 【数据结构与算法003】基本数据结构——线性表(链表)
- 数据结构与算法学习笔记02_2(线性表)
- (4) 数据结构与算法 ---- 线性表 及Java实现 顺序表、链表、栈、队列
- 【数据结构与算法】二叉树深度遍历(非递归)
- 【数据结构与算法】冒泡排序
- Python3 数据结构与算法之插入排序
- 数据结构20:KMP算法(快速模式匹配算法)详解
- java 数据结构与算法第一章学习
- C++ 数据结构之kmp算法中的求Next()函数的算法