导航:首页 > 源码编译 > 线性表的关键算法

线性表的关键算法

发布时间:2022-06-26 12:17:05

‘壹’ 线性表的链式存储结构的典型算法(求代码)

假设是单链表存贮,从头遍历到尾,遍历每个元素是将指针反转,只需要一个额外空间。

算法描述:
header : 指向链表头

p=header;
pre=NULL;
next=NULL;
while(p!=NULL)
{
next=p->next;
p->next=pre;
pre=p;
p=next;
}
head=p;

这样就反转了。用了两个额外空间,时间复杂度O(n).

‘贰’ 数据结构线性表(C版)问题 设计算法

Locate_Sq(Splist *L,int i)
{ if(L->len==0) return 0;
for(j=1;j<=l->len;j++)
if(l->elem[i]==x) retrun i;
else return 0;
}

‘叁’ java设计线性表排序算法

import java.util.Scanner;
import java.util.Arrays;

public class P
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);

float[] A=new float[1],B=new float[1];
int alen=0,blen=0,i,j,k;
String line;

System.out.println("请输入线性表A的各元素,每行一个(输入#结束):");
while(true)
{
line=sc.nextLine();
if(line.equals("#"))
break;
A=Arrays.Of(A,++alen);
A[alen-1]=Float.parseFloat(line);
}
System.out.println("请输入线性表B的各元素,每行一个(输入#结束):");
while(true)
{
line=sc.nextLine();
if(line.equals("#"))
break;
B=Arrays.Of(B,++blen);
B[blen-1]=Float.parseFloat(line);
}
Arrays.sort(A);
Arrays.sort(B);
System.out.println("升序排序后,线性表A的各元素是:");
for(i=0;i<alen;i++)
{
System.out.print(A[i]+" ");
}
System.out.println();
System.out.println();
System.out.println("升序排序后,线性表B的各元素是:");
for(i=0;i<blen;i++)
{
System.out.print(B[i]+" ");
}
System.out.println();
System.out.println();
A=Arrays.Of(A,alen+blen);
for(i=0;i<blen;i++)
{
if(B[i]>=A[alen-1])
A[alen++]=B[i];
else
{
for(j=0;j<alen-1;j++)
{
if(B[i]<=A[j])
break;
}
for(k=alen-1;k>=j;k--)
{
A[k+1]=A[k];
}
A[j]=B[i];
alen++;
}
}
System.out.println("线性表B按顺序插入线性表A中后,线性表A的各元素是:");
for(i=0;i<alen;i++)
{
System.out.print(A[i]+" ");
}
sc.close();
}
}

‘肆’ 线性表顺序存储结构及其有关算法的实现

将顺序表初始化为5个元素,在结构中定义了顺序表的长度,int length:所以在主函数中可以直接调用用printf(

‘伍’ 线性表链式存储结构的基本操作算法实现

这是我学数据结构时亲手码的,好用的话记得给分。。。。。
#include<iostream>
using namespace std;

//线性表的单链表存储表示
struct LNode
{
int data;
struct LNode *next;
};

//逆序创建链表
void CreateList(LNode *L,int a[],int n)
{
LNode *s;
L->next = NULL;
for(int i=n-1;i>=0;--i)
{
s= new LNode;
s->data=a[i];
s->next=L->next;
L->next=s;
}
}
//显示链表
void display(LNode *L)
{
LNode *p;
p=L->next;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
}
//插入结点操作
void ListInsert(LNode *L,int d, LNode *s)
{
LNode *p;
int i=1;
p=L->next;
while(i<d-1)
{
p=p->next;
i++;
}
s->next=p->next;
p->next=s;
}
//删除节点操作
void ListDelete(LNode *L,int d,int &e)
{
LNode *p,*q;
int i=0;
p=L->next ;
while(i<d-1)
{
q=p;
p=p->next;
i++;
}
e=p->data;
q->next=p->next;
delete p;
}
//查找元素
LNode* LocalElem(LNode *L,int e)
{
LNode *p;
p=L->next;
while(p&&p->data!=e) p=p->next;
return p;
}
//逆置单链表
void InvertLinkedList(LNode *L)
{
LNode *p,*s;
p=L->next;
L->next=NULL;
while(p)
{
s=p;
p=p->next;
s->next=L->next;
L->next=s;
}
}

int main()
{
LNode *H;
int n;
cout<<"please enter the length of the list: ";
cin>>n;
int *A=new int[n];
int i;
H=new LNode;
H->next=NULL;
cout<<"please enter "<<n<<" number of the list:"<<endl;
for(i=0;i<n;i++)
cin>>A[i];
CreateList(H,A,n);
cout<<"show the members of the list: ";
display(H);
cout<<endl;

int d;
cout<<"please enter the address of the add member: ";
cin>>d;
LNode *s;
s= new LNode;//初始化局部变量s
cout<<"please enter the data of the add member: ";
cin>>s->data;
ListInsert(H,d, s);
display(H);
cout<<endl;

int p;
cout<<"please enter the address of the delete member: ";
cin>>p;
int c=0;
int &e=c;//非常量引用的初始值必须为左值!!!
ListDelete(H,p,e);
display(H);
cout<<endl;

int g;
cout<<"please enter the member that you want to find: ";
cin>>g;
cout<<"the local of the member is: "<<LocalElem(H,g);
cout<<endl;

InvertLinkedList(H);
cout<<"the invertlinklist is: ";
display(H);
cout<<endl;
return 0;
}

花时间好好看看,一定要看懂

‘陆’ 数据结构的线性表算法

插入元素之后,再次输出元素,但是插入的元素不在线性表中(我用的while(true)控制程序是否结束),
这可能是你在插入后没有修改表将L.length++

删除一个元素之后,再次输出元素的时候,元素还在。如果每次删除的是最后一个的话,没进行插入操作,那删除的元素当然还在表中,这时只是修改了表长L.length

‘柒’ 如何设计一个算法求线性表中最大元素

int sqMax(s,n) //用顺序表实现,返回最大值,s是数组名,n是数组长度
{
int t;
for(int i=0,i<n,i++)
for(int j=i+1,j<n,j++)
if(s[i]<s[j])
{
t =s[i];
s[i]=s[j];
s[i]=t ;
}
return s[i];
}

‘捌’ 写出线性表操作的算法

你已经十分明白了,还问什么?

#include<stdio.h>
void search(int a[];int b)
{
int i=0;
while(i<10&&a[i]!=b)
i++;
if(i<10){
printf("found!");
return;
}
else
{
printf("not found");
return;
}
}
main()
{
int a[]={12,26,39,30,52,43,80,92,101,89};
search(a,b);
}

‘玖’ 【数据结构】求线性表的长度和线性表上的查找算法

/* 顺序存储类型*/
typedef struct
{ ElemType data[MAXSIZE]; /*存放线性表的数组*/
int length; /* length是顺序表的长度*/
}SqList; SqList L;
/* 求顺序表长度*/
int ListLength(SqList L)
{return(L.length);}
/* 给定序号从顺序表中查找元素*/
void ListGet(SqList L ,int i)
{ if(L.length==0) printf("顺序表空\n");
else if(i<1||i>L.length) printf("查找的位置不正确\n");
else printf("顺序表中第%d个元素的值为:%d\n",i,L.data[i-1]);
}
/* 从顺序表中查找与给定元素值相同的元素在顺序表中的位置*/
int ListLocate(SqList L, ElemType x)
{int i=0;
while(i<L.length && L.data[i]!=x)
i++;
if (i<L.length) return (i+1);
else return 0;
}

阅读全文

与线性表的关键算法相关的资料

热点内容
位域结构体编译树形描述 浏览:652
宏基手机如何装安卓系统 浏览:743
linuxcp命令实现 浏览:668
单片机热释红外报警器 浏览:661
单片机原理及接口技术b卷 浏览:356
php链接正则表达式 浏览:966
安卓版苹果手机怎么转手 浏览:103
安卓怎么修改app的名字 浏览:139
域名服务器可将域名地址 浏览:724
广州服务器机柜怎么卖 浏览:238
转让腾讯云三年服务器 浏览:254
网易云音乐加密怎么处理 浏览:389
编译小视频软件 浏览:597
盒马app买东西怎么送 浏览:121
编译原理国产 浏览:694
在线用pdf转word 浏览:426
咪咕app怎么发表文章 浏览:209
phpsftp上传 浏览:936
php可以干嘛 浏览:879
梁箍筋加密区需要满绑扎吗 浏览:331