当前位置:首页 » 操作系统 » 数据结构算法设计题

数据结构算法设计题

发布时间: 2022-08-07 09:19:08

❶ 数据结构算法设计题,会的进来看看

迪杰斯特拉算法 data 数组里存放的是 有向图的 矩阵表示

QQ 578721802

#include"stdio.h"
#include"stdlib.h"
#defineINT_MAX32676
/**
Dijkstra算法是用来计算图中一个
顶点到其余的所有顶点的
最短距离的算法
*/
/***
-1表示两点之间距离是无限大
path[v]表示的这个数组代表了Vx到v的最短路径
路径=path[v][0],v,path[v][1],path[v][2]直到一个path[v][x]==-1

Length[v]代表了Vx到v的最短长度:权之和

代码注释:


**/
typedefstructgraph{
int**p;
intvertNum;
intarcNum;
}*Graph,g;
typedefstructl{
int*le;
bool*isIn;
}*Le;
intVETNUM=6;
voidinit(Le&L,int**&P,Graph&G);
voidDijikstra(Le&L,int**&P,Graph&G,int&V);
intlastInsert(int*&p,int&x);
voidmyprint(Le&L,int**&p);
intmain(){
LeLength;//某个顶点到其余所有顶点的最短距离
int**Path;//路径
intVx;//某个顶点
GraphG;//图
init(Length,Path,G);
printf("Enterthebeginvertex: ");
scanf("%d",&Vx);
Dijikstra(Length,Path,G,Vx);
myprint(Length,Path);
}
voidmyprint(Le&L,int**&p){
inti,j;
for(i=0;i<6;i++){
printf("%d: ",L->le[i]);
for(j=0;j<6;j++)
printf("%d ",p[i][j]);
printf(" ");

}
}
intlastInsert(int*&p,int&x){
inti;
for(i=0;i<VETNUM;i++){
if(p[i]==-1){
p[i]=x;
return1;
}
}
}
voidinit(Le&L,int**&P,Graph&G){
intdata[6][6]={{-1,-1,10,-1,30,100},{-1,-1,5,-1,-1,-1},
{-1,2,-1,50,-1,-1},{-1,-1,-1,-1,-1,10},
{-1,-1,-1,20,-1,60},{-1,-1,-1,-1,-1,-1}};
intdata1[6][6]={{-1,1,20,80,-1,400},{2,-1,-1,-1,-1,700},
{40,6,-1,4,-1,100},{-1,-1,-1,-1,4,-1},
{-1,-1,-1,-1,-1,3},{-1,-1,-1,-1,-1,-1}};
intvextnum=6;
inti,j;
G=(Graph)calloc(sizeof(g),1);
G->p=(int**)malloc(sizeof(int*)*6);
P=(int**)malloc(sizeof(int*)*6);
L=(Le)calloc(sizeof(structl),1);
L->le=(int*)calloc(sizeof(int),6);
L->isIn=(bool*)calloc(sizeof(bool),6);
for(i=0;i<6;i++){
G->p[i]=(int*)malloc(sizeof(int)*6);
P[i]=(int*)calloc(sizeof(int),6);
}
G->vertNum=6;
for(i=0;i<vextnum;i++)
for(j=0;j<vextnum;j++)
G->p[i][j]=data[i][j],P[i][j]=-1;

/***
for(i=0;i<6;i++)
printf("%d ",L->isIn[i]);
printf("xsaxas");
*/
}
voidDijikstra(Le&L,int**&P,Graph&G,int&V){
intVk;
inti,j;
intMin;
intcheck=0;
/**
首先将L初始化在这里面必有一条
V到其他顶点的最小值
**/
for(i=0;i<G->vertNum;i++){
L->le[i]=G->p[V][i];
//printf("%d ",L->le[i]);
if(L->le[i]>-1)
check=1;
}
if(check==0)
printf("Error!!"),exit(0);
for(i=1;i<G->vertNum;i++){
Min=INT_MAX;
for(j=0;j<G->vertNum;j++)
if(!L->isIn[j])
{
if(L->le[j]!=-1&&L->le[j]<Min)
{
Vk=j,Min=L->le[j];
}
}
L->isIn[Vk]=true;//将距离Vx最近的点加入到另外一个集合中
//也就是说下一次不要比较

lastInsert(P[V],Vk);
for(j=0;j<G->vertNum;j++){

if((G->p[Vk][j]!=-1)&&!L->isIn[j]
&&(Min+G->p[Vk][j]<L->le[j]))
{
L->le[j]=Min+G->p[Vk][j];
lastInsert(P[j],Vk);
lastInsert(P[j],j);
}
if(L->le[j]==-1&&(G->p[Vk][j]!=-1))
{
L->le[j]=Min+G->p[Vk][j];
lastInsert(P[j],Vk);
lastInsert(P[j],j);
}

}


}


}

❷ 数据结构算法设计题

对于有序序列的查找,第一时间想到的就应该是二分查找,你这里的需求就是一个二分查找的变异。
public static int Method(int[] nums, int low, int high, int target)
{
while (low <= high)
{
int middle = (low + high) / 2;
if (target == nums[middle])
{
return middle;
}
else if (target > nums[middle])
{
low = middle + 1;
}
else if (target < nums[middle])
{
high = middle - 1;
}
}
if(math.Abs(nums[low ]-target )<=math.Abs(nums[high]-target ))
return low ;
else

return high;
}

❸ 数据结构算法设计题和2个计算题(重分)

1:
至少为3
进栈:s1,s2,
s3,
s4,
s5,s6
出栈:
s2,
s3,
s4,
s6,s5,s1
栈内
元素
个数:1,2,1,2,1,2,1,2,3,2,1,0
2:
2^0+2+2^2+2^3+……+2^(h-1)=2^h-1
》》[2^h-1]<n<[2^(h+1)-1]
所以h=[log2
(n+1)]向下取整
算法设计题好久没看了,很伤脑筋
希望对你有用

❹ 数据结构算法设计题求解

1.
tempplate<class datatype>
int count(struct node* head,datatype x)
{
int num = 0;
struct node* index = node;
while(index!=NULL)
{
if(x == index->data)
num++;
index = index->next;
}
return num;
}

2.
int func(char A[],int n)
{
int i,j;
int num = 0;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(A[j] < A[i])
num++;
}
}
return num;
}

❺ 数据结构算法设计题

某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )存储方式最节省运算时间. (A)...已知带头结点的单链表L中的结点是按整数值递增排列的,试写一算法,将值为x 的结点插入到表L中,使得L仍然有序

❻ 数据结构算发题 算法设计题 1、假设有两个依元素值递增有序排列的线性表A和B采用单链表Lin

#include"stdio.h"
#include"malloc.h"
struct list
{
int data;
struct list *next;
};
struct list *head1,*head2,*p1,*p2,*q1,*q2;
void main()
{
int n=0;
void unionlist();
p1=q1=(struct list*)malloc(sizeof(struct list));
printf("请输入第一个链表的信息\n");
scanf("%d",&p1->data);
while(p1->data!=0)
{
n=n+1;
if(n==1)
head1=q1;
else
q1->next=p1;
q1=p1;
p1=(struct list*)malloc(sizeof(struct list));
scanf("%d",&p1->data);
}
q1->next=NULL;
n=0;
p2=q2=(struct list*)malloc(sizeof(struct list));
printf("请输入第二个链表的信息\n");
scanf("%d",&p2->data);
while(p2->data!=0)
{
n=n+1;
if(n==1)
head2=q2;
else
q2->next=p2;
q2=p2;
p2=(struct list*)malloc(sizeof(struct list));
scanf("%d",&p2->data);
}
q2->next=NULL;
unionlist();
}
void unionlist()
{
struct list *head,*p;
int i=0;
p1=head1;
p2=head2;
head=p=(struct list*)malloc(sizeof(struct list));
p->data=0;
while(p1 && p2)
{
if(p1->data<=p2->data)
{
p->next=p1;
p=p1;
p1=p1->next;
}
else
{
p->next=p2;
p=p2;
p2=p2->next;
}
}
p->next=p1?p1:p2;
p=head;
printf("合并后的链表为如下:\n");
while(p)
{
i=i+1;
if(i==1)
p=p->next;
printf("%3d",p->data);
p=p->next;
}
printf("\n");
free(head1);
free(head2);
}

❼ 数据结构,算法设计题。:1设计算法实现删除顺序表中多余重复元素,如:对于顺序表(1 . 2 .3 .

先对顺序表的元素进行排序,然后比较有重复则删除

解决方法:

  • #include <stdio.h>//删除一列数中重复的数字使之只保留一个

  • #define N 6

  • void delete(int a[],int j){int i;

  • } j=0;

  • for(i=0;i<N-1;i++)

  • { if(a[j]==a[j+1]) {

  • deletel(a,j);

  • j--;//没删除一个数字j减一,保证遍历到每个数字

  • 还有一种方法的用两个顺序表,一个为源表(存原数列),一个为目标表,将源表中的元素王目标表中移(有与之相同的则删除,没有则保存)

❽ 数据结构c语言版 :算法设计题 求大神解答。。在线等。。。

/*判断一段字符串是不是回文,所谓回文,也就
是正读反读都一样,如asdffdsa*/

#include<iostream>
#include<stdio.h>
using namespace std;
const int size=100;
class HuiWen
{
private:
char ch[100];
int top;
public:
HuiWen(){top = -1;};
void input(char c);
bool isHuiWen();
bool empty();
};
void HuiWen::input(char c)
{
//if(top==size-1) throw"上溢";
top++;
//cin>>ch[top];
ch[top]= c;
}
bool HuiWen::isHuiWen()
{
for(int i=0;i<top;i++)
if(ch[top--]!=ch[i])
return 0;
return 1;
}
bool HuiWen::empty()
{
if(top==-1)
return 1;
return 0;
}
int main()
{
HuiWen hw;
cout<<"请输入字符串,以回车键结束"<<endl;
int c;
while((c=getchar())!='\n')
hw.input(c); //主要就是这里做了修改。

if(hw.empty())
cout<<"对不起,无字符"<<endl;
else
{
if(hw.isHuiWen())
cout<<"该字符串是回文"<<endl;
else
cout<<"该字符串不是回文"<<endl;
}
return 0;
}

热点内容
光遇如何用密码登上账号 发布:2025-01-16 18:01:26 浏览:245
class反编译软件 发布:2025-01-16 18:01:12 浏览:6
安卓手机推特叫什么 发布:2025-01-16 17:55:32 浏览:210
linux下安装mysql 发布:2025-01-16 17:54:58 浏览:630
c语言停留 发布:2025-01-16 17:51:13 浏览:959
一机一码文件加密 发布:2025-01-16 17:36:19 浏览:415
软件登录密码用户名是什么 发布:2025-01-16 17:11:52 浏览:111
我的世界建服务器该注意什么 发布:2025-01-16 17:06:40 浏览:568
php随机小数 发布:2025-01-16 17:02:48 浏览:139
linuxterminal 发布:2025-01-16 17:02:04 浏览:249