package SequenceList;
public class node {
public int[] Data;
public int Length;
public node()
{
}
public node(int[] a)
{
this.Data=new int[a.length];
for(int i=0;i<a.length;i++)
{
this.Data[i]=a[i];
this.Length++;
}
}
public node(int [] a,int n)
{
this.Data=new int[n];
for(int i=0;i<a.length;i++)
{
this.Data[i]=a[i];
this.Length++;
}
}
public void SystemN(node n)
{
for(int i=0;i<n.Length;i++)
{
System.out.print(n.Data[i]+" ");
}
}
public int getElem(node n,int i)//取得顺序表中某一位置上的元素
{
int e=0;
if(i<1||i>n.Length)
return 0;
e=n.Data[i-1];
return e;
}
public int LocateElem(node n,int e)//确定某个元素的位置
{
int i=0;
while(i<n.Length&&n.Data[i]!=e)
i++;
if(i>=n.Length)
return 0;
else
return(i+1);
}
public int ListInert(node n,int i,int e)//向顺序表中某位置添加元素
{
int j;
if(i<1||i>n.Length)
{
System.out.println("元素插入位置错误!");
return 0;
}
i--;
for(j=n.Length;j>i;j--)
{
n.Data[j]=n.Data[j-1];
}
n.Data[i]=e;
n.Length++;
return 1;
}
public int ListDelete(node n,int i)//删除顺序表中某一位置上的元素
{
int j;
if(i<1||i>n.Length)
return 0;
i--;
int e=n.Data[i];
for(j=i;j<n.Length;j++)
{
n.Data[j]=n.Data[j+1];
}
n.Length--;
return 1;
}
public void Merge(node n1,node n2,node n3)//合并两个有顺序的顺序表
{
int i=0,j=0,k=0;
System.out.println(n1.Length);
System.out.println(n2.Length);
while(i<n1.Length&&j<n2.Length)
{
if(n1.Data[i]<n2.Data[j])
{
n3.Data[k]=n1.Data[i];
i++;
k++;
}
else if(n1.Data[i]>n2.Data[j])
{
n3.Data[k]=n2.Data[j];
j++;
k++;
}
else
{
n3.Data[k]=n1.Data[i];
i++;
j++;
k++;
}
}
System.out.println(i);
System.out.println(j);
while(i<n1.Length)
{
n3.Data[k]=n1.Data[i];
i++;
k++;
}
while(j<n2.Length)
{
n3.Data[k]=n2.Data[j];
j++;
k++;
}
n3.Length=k;
}
public void ListInsert(node n,int x)//向有序顺序表中插入元素,并使顺序表仍然有序
{
int i=0,j;
while(i<n.Length&&x>=n.Data[i])
i++;
for(j=n.Length;j>i;j--)
n.Data[j]=n.Data[j-1];
n.Data[i]=x;
n.Length++;
}
public void reverse(node n)//将顺序表中的元素互置
{
int i;
int e;
for(i=0;i<n.Length/2;i++)
{
e=n.Data[i];
n.Data[i]=n.Data[n.Length-i-1];
n.Data[n.Length-i-1]=e;
}
}
public void delall1(node n,int x)//删除顺序表中相同元素X的算法1
{
int i=0,j;
while(i<n.Length&&n.Data[i]!=x)
i++;
for(j=i+1;j<n.Length;j++)
{
if(n.Data[j]!=x)
{
n.Data[i]=n.Data[j];
i++;
}
}
n.Length=i;
}
public void delall2(node n,int x)//删除顺序表中相同元素X的算法2
{
int i=0,k=0;
while(i<n.Length)
{
if(n.Data[i]==x)
k++;
else
n.Data[i-k]=n.Data[i];
i++;
}
n.Length-=k;
}
public void delallxy(node n,int x,int y)//删除顺序表中元素值在x到y之间的所有元素算法
{
int i=0,k=0;
while(i<n.Length)
{
if(n.Data[i]>=x&&n.Data[i]<=y)
k++;
else
n.Data[i-k]=n.Data[i];
i++;
}
n.Length-=k;
}
public void move(node n)//将一个顺序表中小于0的元素放在表前面,大于0的元素放在表后面
{
int e;
int i=0,j=n.Length-1;
while(i<j)
{
while(i<j&&n.Data[i]<0)
i++;
while(i<j&&n.Data[j]>=0)
j--;
if(i<j)
{
e=n.Data[i];
n.Data[i]=n.Data[j];
n.Data[j]=e;
}
}
}
public void delsame(node n)//删除顺序表中重复的元素,并且使原有的元素顺序不变
{
int i,j,k;
if(n.Length>0)
{
j=0;
for(i=1;i<n.Length;i++)
{
k=0;
while(k<=j&&n.Data[k]!=n.Data[i])
k++;
if(k>j)
{
j++;
n.Data[j]=n.Data[i];
}
}
n.Length=j+1;
}
}
public void Intersection(node A,node B,node C)//用顺序表表示集合。实现交集运算的算法
{
int i,j,k=0;
for(i=0;i<A.Length;i++)
{
j=0;
while(j<B.Length&&B.Data[j]!=A.Data[i])
j++;
if(j<B.Length)
C.Data[k++]=A.Data[i];
}
C.Length=k;
}
public void Union(node A,node B,node C)//用顺序表表示集合,实现集合的求并运算
{
int i,j,k=0;
for(i=0;i<A.Length;i++)
{
C.Data[i]=A.Data[i];
}
C.Length=A.Length;
for(i=0;i<B.Length;i++)
{
j=0;
while(j<A.Length&&B.Data[i]!=A.Data[j])
j++;
if(j==A.Length)
C.Data[C.Length+k++]=B.Data[i];
}
C.Length+=k;
}
public void Diffence(node A,node B,node C)//用顺序表表示集合,实现集合的求差运算
{
int i,j,k=0;
for(i=0;i<A.Length;i++)
{
j=0;
while(j<B.Length&&B.Data[j]!=A.Data[i])
j++;
if(j==B.Length)
C.Data[k++]=A.Data[i];
}
C.Length=k;
}
public void merge1(node A,node B,node C)//顺序表A、B元素个数分别为m和n,并且都有序,该算法实现将两个顺序表合并到顺序表C中,并保持整个表仍然有序
{
int i=0,j=0,k=0;
while(i<A.Length&&j<B.Length)
{
if(A.Data[i]<B.Data[j])
{
C.Data[k]=A.Data[i];
k++;
i++;
}
else
{
C.Data[k]=B.Data[j];
k++;
j++;
}
}
while(i<A.Length)
{
C.Data[k]=A.Data[i];
k++;
i++;
}
while(j<B.Length)
{
C.Data[k]=B.Data[j];
k++;
j++;
}
C.Length=k;
}
public void merge2(node A,node B)//假设B中的大小为m+n,不利用C表,将A表与B表合并,并使合并后仍然有序
{
int i=0,j=0,k;
while(i<A.Length)
{
if(A.Data[i]>B.Data[B.Length-1])//A中元素比B中最后一个元素都大
{
B.Data[B.Length]=A.Data[i];
B.Length++;
i++;
}
else if(A.Data[i]<B.Data[j])//如果A中元素比B中某个元素小
{
for(k=B.Length-1;k>=j;k--)
{
B.Data[k+1]=B.Data[k];//则将B中元素j及以后的元素后移
}
B.Data[j]=A.Data[i];
B.Length++;
i++;
j++;
}
else
j++;
}
}
public void merge3(node A,int m,int n)//顺序表A有m+n个元素,且前m个有序,后n个有序,该算法实现使整个顺序表有序
{
int i=0,j=m,k;
int e;
while(j<A.Length&&i<j)
{
if(A.Data[j]>A.Data[j-1])//表示整个顺序表有序,退出循环
break;
else if(A.Data[j]<A.Data[i])//如果发现后面有比前面小的,则将A.Data[j]插入到前半部分中
{
e=A.Data[j];
for(k=j-1;k>=i;k--)
A.Data[k+1]=A.Data[k];
A.Data[i]=e;
i++;
j++;
}
else
i++;
}
}
}
java表述的数据结构(顺序表)
需积分: 9 107 浏览量
2010-04-07
13:24:18
上传
评论
收藏 3KB ZIP 举报
xulianlong
- 粉丝: 0
- 资源: 22
最新资源
- Python大作业:音乐播放软件(爬虫+可视化+数据分析+数据库)
- 课程设计-python爬虫-爬取日报,爬取日报文章后存储到本地,附带源代码+课程设计报告
- 软件和信息技术服务行业投资与前景预测.pptx
- 课程设计-基于SpringBoot + Mybatis+python爬虫NBA球员数据爬取可视化+源代码+文档+sql+效果图
- 软件品质管理系列二项目策划规范.doc
- 基于TensorFlow+PyQt+GUI的酒店评论情感分析,支持分析本地数据文件和网络爬取数据分析+源代码+文档说明+安装教程
- 软件定义无线电中的模拟电路测试技术.pptx
- 软件开发协议(作为技术开发合同附件).doc
- 软件开发和咨询行业技术趋势分析.pptx
- 软件测试题详解及答案.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈