关于数据结构的题目,求助!!急!!
#include
#include
typedef struct LNode{
float coef;
int expn;
struct LNode *next;
}LNode, *LinkList, *Link;
Link MakeNode(float c, int e){
Link p;
p=(Link)malloc(sizeof(LNode));
p->coef=c; p->expn=e; p->next=NULL;
return p;
}
void InitPoly(LinkList &P){
P=MakeNode(0,-1);
}
void Create(LinkList &P){
Link rear;
float c; int e;
InitPoly(P);
rear=P;
printf("Input coef expn, (0 0)Exit
");
while(1){
scanf("%f%d",&c,&e);
if(c==0) break;
rear->next=MakeNode(c,e);
rear=rear->next;
}
}
void PrintPoly(LinkList P){
Link p;
if(P==NULL)
printf("NULL
");
else if(P->next==NULL)
printf("0
");
else{
p=P->next;
while(p){
printf("%fX^%d",p->coef,p->expn);
p=p->next;
if(p && p->coef>0) printf("+");
}
printf("
");
}
}
void Copy(LinkList P1, LinkList &P2){
Link p1, p2;
if(P1==NULL) return;
InitPoly(P2);
p1=P1->next;
p2=P2;
while(p1){
p2->next=MakeNode(p1->coef,p1->expn);
p1=p1->next; p2=p2->next;
}
}
void AddPoly(LinkList P1, LinkList P2, LinkList &P3){
Link q1,q2,q3;
if(!P1 || !P2) return;
InitPoly(P3);
q3=P3;
q1=P1->next; q2=P2->next;
while(q1&&q2){
if(q1->expnexpn){
q3->next=MakeNode(q1->coef,q1->expn);
q3=q3->next; q1=q1->next;
}
else if(q1->expn>q2->expn){
q3->next=MakeNode(q2->coef,q2->expn);
q3=q3->next; q2=q2->next;
}
else{
if(q1->coef+q2->coef!=0){
q3->next=MakeNode(q2->coef+q1->coef,q2->expn);
q3=q3->next;
}
q1=q1->next;q2=q2->next;
}
}
while(q1){
q3->next=MakeNode(q1->coef,q1->expn);
q3=q3->next; q1=q1->next;
}
while(q2){
q3->next=MakeNode(q2->coef,q2->expn);
q3=q3->next; q2=q2->next;
}
}
void SubPoly(LinkList P1, LinkList P2, LinkList &P3){
Link q1,q2,q3;
if(!P1 || !P2) return;
InitPoly(P3);
q3=P3;
q1=P1->next; q2=P2->next;
while(q1&&q2){
if(q1->expnexpn){
q3->next=MakeNode(q1->coef,q1->expn);
q3=q3->next; q1=q1->next;
}
else if(q1->expn>q2->expn){
q3->next=MakeNode(-(q2->coef),q2->expn);
q3=q3->next; q2=q2->next;
}
else{
if(q1->coef+q2->coef!=0){
q3->next=MakeNode(q2->coef-q1->coef,q2->expn);
q3=q3->next;
}
q1=q1->next;q2=q2->next;
}
}
while(q1){
q3->next=MakeNode(q1->coef,q1->expn);
q3=q3->next; q1=q1->next;
}
while(q2){
q3->next=MakeNode(-(q2->coef),q2->expn);
q3=q3->next; q2=q2->next;
}
}
void Qiudao(LinkList P1, LinkList &P2){
Link p1, p2;
if(P1==NULL) return;
InitPoly(P2);
p1=P1->next;
p2=P2;
while(p1){
p2->next=MakeNode((p1->coef)*(p1->expn),p1->expn-1);
p1=p1->next; p2=p2->next;
}
}
void jifenpolyn(LinkList P1, LinkList &P2){
Link p1, p2;
if(P1==NULL) return;
InitPoly(P2);
p1=P1->next;
p2=P2;
while(p1){
p2->next=MakeNode((p1->coef)/(p1->expn+1),p1->expn+1);
p1=p1->next; p2=p2->next;
}
}
void IS(LinkList P1, LinkList &P2,float c, int e){
if(P1==NULL) return;
Link q1,q2;
InitPoly(P2);
q1=P1->next;
q2=P2;
while(q1){
q2->next=MakeNode((q1->coef)*c,q1->expn+e);
q1=q1->next; q2=q2->next;
}
}
void Multiplypolynl(LinkList P1, LinkList P2, LinkList &P3,LinkList &P4){
Link q2;
q2=P2;
if(!P1 || !P2) return;
InitPoly(P3);
InitPoly(P4);
while(q2){
q2=q2->next;
IS(P1,P3,q2->coef,q2->expn);
AddPoly(P3,P4,P4 );
}
}
void Destroypolyn(LinkList P){
Link rear;
while(rear){
rear=P->next;
P->next=rear->next;
free(rear);}
free(P);
}
void Changepolyn(LinkList P,float c, int e){
Link rear;
while(rear->expn<e)
rear=rear->next;
rear->coef=c;
}
void Insert( LinkList P1,LinkList P3,float c, int e){
LinkList P2;
P2=MakeNode(c,e);
AddPoly(P1,P2,P3);}
#define N 12
void main(){
LinkList P[N]={NULL};
int i1,i2,i3,i4,menu,i;
while(1){
printf(" 0 -- Exit
");
printf(" 1 -- Create
");
printf(" 2 -- Print
");
printf(" 3 -- Copy
");
printf(" 4 -- Add
");
printf(" 5 -- sub
");
printf(" 6 -- qiudao
");
printf(" 7 -- jifeng
");
printf(" 8 -- multi
");
printf(" 9 -- destory
");
printf(" 10 -- change
");
printf(" 11 -- insert
");
printf(" Select: ");
scanf("%d", &menu);
switch(menu){
case 0: return;
case 1:
printf(" Address: ");
scanf("%d", &i1);
Create(P[i1]);
break;
case 2:
printf("
");
for(i=0;i<N; i++){
printf(" P(%d)= ", i);
PrintPoly(P[i]);
}
printf("
");
break;
case 3:
printf(" A-->B, Input A,B: ");
scanf("%d%d",&i1,&i2);
Copy(P[i1],P[i2]);
break;
case 4:
printf(" A+B=C, Input A,B,C: ");
scanf("%d%d%d",&i1,&i2,&i3);
AddPoly(P[i1],P[i2],P[i3]);
break;
case 5:
printf(" A-B=C, Input A,B,C: ");
scanf("%d%d%d",&i1,&i2,&i3);
SubPoly(P[i1],P[i2],P[i3]);
break;
case 6:
printf(" 对A求导, Input A,B:");
scanf("%d%d",&i1,&i2);
Qiudao(P[i1],P[i2]);
break;
case 7:
printf(" 对A积分 Input A,B:");
scanf("%d%d",&i1,&i2);
jifenpolyn(P[i1],P[i2]);
break;
case 8:
printf(" A*B=C, Input A,B,C: ");
scanf("%d%d%d%d",&i1,&i2,&i3,&i4);
Multiplypolynl(P[i1],P[i2],P[i3],P[i4]);
break;
case 9:
printf("销毁A Input A:");
scanf("%d",&i1);
Destroypolyn(P[i1]);
break;
case 10:
float c; int e;
printf("change Input A,e,c:");
scanf("%d%d%f",&i1,&e,&c);
Changepolyn(P[i1],c,e);
break;
case 11:
float d; int f;
printf("insert Input A,B,e,c: ");
scanf("%d%d%d%f",&i1,&i2,&f,&d);
Insert(P[i1],P[i2],c,e);
break;
default: ;
}
}
}
算法:
1. 首先2个一组比较一轮,较大的加入序列A,较小的加入序列B,若剩下一个则同时加入序列A和B;
2. 然后在A中求最大值,在B中求最小值。
分析:
若n为偶数,设n=2k,则第一步需要k次比较,第二步取最大值和最小值各需k-1次比较,
共 k+(k-1)+(k-1) = 3k-2 = (3n-4)/2次;
若n为奇数,设n=2k+1,则第一步需要k次比较,第二步取最大值和最小值各需k次比较,
共 k+k+k = 3k = (3n-3)/2次;
第二道题你的题目可能错了 在for 循环的地方应该是i<=k要不没什么意义
你原题的答案是看开头是否是负数
按照我说的第二道题是保留着最后一个正数
你老师要是说不对 你就让他写代码去 我调试过了。
c语言数据结构实验 题目请看图 感谢大佬们
sqlink L);\/\/判空表 void PrintList(sqlink L);\/\/打印表元素 int main(){ sqlink L = (sqlink)malloc(sizeof(sqlist)); CreateList(L); PrintList(L); int data,x; printf("请输入要插入的数据和位置:");...
数据结构题目求大神
图 有如下参数: 边数=12 顶点数=7顶点 顶点 边的权值1 2 181 5 231 6 41 7 62 3 52 4 82 5 123 4 104 5 154 6 205 6 256 7 7用Kruskal(克鲁斯卡尔)算法,求最小生成树. 先将所有边的权值按照从小到大...
1用尾插法建立一个循环链表,存放做游戏的学生序号;
呵呵,蛮经典的一道数据结构题目。解题思路:尾插法建立循环链表几乎所有的数据结构书都会提到,这不是问题关键,关键在于该游戏的算法实现。1 循环链表的元素遍历与删除你需要掌握,这书上也会有。2 题设说从某个同学开始,那么你首先要实现的肯定就是输入一个同学的学号,从它开始,本质上将就是让你...
数据结构课程设计题目,图的建立以及遍历。
include <iostream> \/\/#include <malloc.h> define INFINITY 32767 define MAX_VEX 20 \/\/最大顶点个数 define QUEUE_SIZE (MAX_VEX+1) \/\/队列长度 using namespace std;bool *visited; \/\/访问标志数组 \/\/图的邻接矩阵存储结构 typedef struct{ char *vexs; \/\/顶点向量 int arcs[MAX_VEX][...
数据结构问题
非0”元素存放在首地址2000存储区域中,而a59=0,也就是说它根本就不在那片存储区域,也就谈不上首地址。3、由题目条件知道A是个下三角矩阵,A中全部非0元素一共55个,就算是最后一个非0元素的首地址也无非是2000+(55-1)×4=2216,不可能到2220。所以我认为这是一道错误的题目。
求数据结构与算法分析高人帮忙做下这几道题目。(希望能给出正确答案,在...
判断题 1. F 二叉树就可以用数组存储。2. F 当发生冲突时,它要在下一个位置找,但如果该位置已被占用,仍需要继续向前。故同 义词不一定相邻。3. F 图的邻接矩阵的行列数只取决于顶点数量。4. F 没有最快的排序算法,只有特定条件下的相对较快。5. T 选择题 1. D 2. B Loc(a[6])...
请用c语言写,数据结构的题一个带头指针的单链表,写出在其值为x的结点...
include <stdio.h>#include <malloc.h>typedef struct st{ int id; struct st *next; struct st *tailST;}ST;ST *getSTS(int len);\/\/获取一个链表,节点个数为len,返回链表首地址ST *getST(ST *headST,int con);\/\/获取第con个节点void printfST(ST *headST);\/\/打印链表int...
高分请高人帮忙数据结构的题目
1.d1-->d2-->d3-->d4(线形关系)2.语句的频度就是该语句执行的次数:(1)执行了n-1次,即用线性阶表示就是o(n)(2)执行了n-1次, 即用线性阶表示就是o(n)(3)执行了n-1次,即用线性阶表示就是o(n)(4)执行了(n+1)*n\/2次, 用平方阶表示就是o (n*n)3.我是用的快速排序,...
数据结构课程设计题目 1. 运动会分数统计 任务:参加运动会有n个学校...
include<iostream> include<string> include<iomanip> include<fstream> using namespace std;int n; \/\/n个学校 int m; \/\/m个男子项目 int w; \/\/w个女子项目 struct pro \/\/表示项目的结构体 { string name; \/\/项目名称 int snum[6]; \/\/前5名学校的编号 }p[21];struct school \/\/表示...
数据结构与算法的题目怎么做
int length(); \/\/求表长,求出线性表L中数据元素个数。void get(int &i); \/\/取元素函数,若1≤i≤LENGTH(L), 则函数值为给定线性表L中第i个数据元素,否则为空元素NULL。void prior(int &i); \/\/求前趋函数,若elm的位序大于1,则函数值为elm的前趋,否则为空元素。void next(...
空衬意鲁:[答案] 1数据元素是数据最小单位(错) 2程序一定是算法(错) 3线性表的特点是每个元素都有一个前驱和一个后继.(错) 4循环链表不是线性表.(错) 5队列是一种插入与删除操作分别在表的两端进行线性表是一种先进型结构(对) 6通常使用队列...
天全县15869885224: 求解关于数据结构的填空题,谢谢!数据的逻辑结构是从逻辑上描述数据,它与数据的存储无关.因此,数据的逻辑结构可以看作是( ),存储结构依赖于计... - ?
空衬意鲁:[答案] 数据之间关系的描述 存储
天全县15869885224: 请教关于数据结构的一个问题!在查找这一张中有一个概念叫做平均查找长度,以顺序查找为例,求法ASL=n*p1+(n - 1)*p2+…+2*pn - 1+pn,为什么这么算?... - ?
空衬意鲁:[答案] 是和概率有关,但是与放回与不放回的概率不同.查找第几个数,是随机的,所以查找的次数也是随机的,即查找次数是随机变量,随机变量的平均值就是随机变量的数学期望,是随机变量值与取这个值的概率的乘积之和. 一般来说,顺序查找采用由...
天全县15869885224: 数据结构题目 - ?
空衬意鲁: 时间问题,明天把五题补上,或者发到你邮箱里 一, 1 D 数据元素是数据的基本单位, 数据项是不可分割的最小单位. 2 C 线性表是由类型相同的数据元素组成的有限序列.线性表的数据元素可以是最简的数值和字符,也可以是比较复杂的信...
天全县15869885224: 请教几个数据结构的习题,望各位大侠不吝赐教! 线性表中结点的集合是____的,结点间的关系是____的. 在顺序表中访问任意一结点的时间复杂度均为__... - ?
空衬意鲁:[选项] A. 访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n) B. 在第i个结点后插入一个新结点(1≤i≤n) C. 删除第i个结点(1≤i≤n) D. 将n个结点从小到大排序
天全县15869885224: 帮忙做些题,关于数据结构的题. - ?
空衬意鲁: 1) 4 不光是排序算法,所有的算法在设计的时候都是要考虑时间和空间效率;2)4 因为栈的操作是先进后出的思想,4出栈后必然后面应该是3了3)1 物理结构和物理地址都是计算机内的地址,在当前使用时随机分配的;4)1 将i个位置包括i个位置上的元素均向后移动;只有在链表中插入元素时才申请新节点5)16)3 直接前驱和直接后继是在链表中才有的说法7)1 队列中的元素必须是先进先出的;8)2 一个放入运算符号和初值,一个放入中间结果和最后结果9)110)2 栈的操作是先进后出的,只能对栈顶元素进行操作的
天全县15869885224: 数据结构题目求解答!先谢各位了!! - ?
空衬意鲁: 第一题选D:顺序存储结构 首先说明一下什么是数据的存储结构,它是批数据结构在计算机中的表示(物理结构),主要有四种:顺序存储、链式存储、索引存储和散列存储.顺序存储的特点是:逻辑上相邻的元素存储在物理位置上也相邻的存...
天全县15869885224: 跪求一道数据结构题的答案!!急!! - ?
空衬意鲁: 算法:1. 首先2个一组比较一轮,较大的加入序列A,较小的加入序列B,若剩下一个则同时加入序列A和B;2. 然后在A中求最大值,在B中求最小值.分析:若n为偶数,设n=2k,则第一步需要k次比较,第二步取最大值和最小值各需k-1次比较,共 k+(k-1)+(k-1) = 3k-2 = (3n-4)/2次;若n为奇数,设n=2k+1,则第一步需要k次比较,第二步取最大值和最小值各需k次比较,共 k+k+k = 3k = (3n-3)/2次;
天全县15869885224: 数据结构题目 帮帮忙 - ?
空衬意鲁: ( T )1.线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续.( T)2. 栈和队列的存储方式既可是顺序方式,也可是链接方式.( T )3.二维数组是其数组元素为线性表的线性表.( T )4. 对于一棵非空二叉树,它的根结点作为第一...
天全县15869885224: 高分悬赏:三道数据结构题目,高手们帮忙做个~~ - ?
空衬意鲁: 一. A用二叉链表作存储结构实现二叉排序树的下列操作: 1.输入一列元素(用整型或字符),生成一颗二叉排序树 2.中序遍历二叉排序树 3.求结点数目 4.打印每个结点的值及其度数 5.输入元素X,查找一个结点,其值为X,返回信息:success / ...