问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据结构课程设计,综合查找算法

发布网友 发布时间:2022-05-02 07:01

我来回答

4个回答

热心网友 时间:2023-10-10 13:12

  #include <stdio.h>

  typedef int KeyType;
  typedef struct{
  KeyType key;
  int maths;
  int english;
  }ElemType;
  #define EQ(a,b) ((a)==(b))
  #define LT(a,b) ((a)< (b))
  #define LQ(a,b) ((a)<=(b))

  typedef struct {
  ElemType *elem;
  int length;
  }SSTable;

  int Search_Seq(SSTable ST,KeyType key)
  {
  int i;
  ST.elem[0].key=key;
  for(i=ST.length; !EQ(ST.elem[i].key,key); --i);
  return i;
  }

  int Search_Bin(SSTable ST,KeyType key)
  {
  int low,mid,high;
  low=1;high=ST.length;
  while(low<=high){
  mid=(low+high)/2;
  if EQ(key,ST.elem[mid].key) return mid;
  else if LT(key,ST.elem[mid].key) high=mid -1;
  else low=mid +1;
  }
  }

  getdata(SSTable * t)
  {
  FILE *fp;
  int i=1;
  fp=fopen("stu.txt","r");
  fscanf(fp,"%d",&(t->length));
  while(i<=t->length)
  {
  fscanf(fp,"%d %d %d",&(t->elem[i].key),
  &(t->elem[i].maths),&(t->elem[i].english) );
  i++;
  }
  fclose(fp);
  }

  main()
  {
  ElemType stu[50];
  SSTable class;
  int i,j,k;
  long time;
  class.elem=stu;

  getdata(&class);

  printf("This class has %d students.\n",class.length);
  printf("Input stuno you want search:\n");
  scanf("%d",&k);

  i=Search_Seq(class,k);
  j=Search_Bin(class,k);
  printf("Maths English\n");
  printf("%d %d\n",class.elem[i].maths,class.elem[i].english);
  printf("%d %d\n",class.elem[j].maths,class.elem[j].english);

  for(i=1;i<=4;i++)
  {j=stu[i].maths+stu[i].english;
  printf("%d\n",j);
  }

  }
  二叉排序树

  示例

  #include <alloc.h>

  #define ERROR 0;
  #define FALSE 0;
  #define TRUE 1;
  #define OK 1;

  typedef int ElemType;
  typedef int Status;
  typedef int KeyType;

  #define EQ(a,b) ((a)==(b))
  #define LT(a,b) ((a)< (b))
  #define LQ(a,b) ((a)<=(b))

  typedef struct BinaryTree

  {
  ElemType data;
  struct BinaryTree *l;
  struct BinaryTree *r;
  }*BiTree,BiNode;

  BiNode * new()
  {
  return( (BiNode *)malloc(sizeof(BiNode)) );
  }

  CreateSubTree(BiTree *T,ElemType *all,int i)
  {
  if ((all[i]==0)||i>16)
  {
  *T=NULL;
  return OK;
  }
  *T=new();
  if(*T==NULL) return ERROR;
  (*T)->data=all[i];
  CreateSubTree(&((*T)->l),all,2*i);
  CreateSubTree(&((*T)->r),all,2*i+1);
  }

  CreateBiTree(BiTree *T)
  {
  ElemType all[16]={0,1,2,3,0,0,4,5,0,0,0,0,6,0,0,0,};
  CreateSubTree(T,all,1);
  }

  printelem(ElemType d)
  {
  printf("%d\n",d);
  }

  PreOrderTraverse(BiTree T,int (*Visit)(ElemType d))
  {
  if(T){
  if(Visit(T->data))
  if(PreOrderTraverse(T->l,Visit))
  if(PreOrderTraverse(T->r,Visit)) return OK;
  return ERROR;
  } else return OK;
  }

  InOrderTraverse(BiTree T,int (*Visit)(ElemType d))
  {
  if(T){
  if(InOrderTraverse(T->l,Visit))
  if(Visit(T->data))
  if(InOrderTraverse(T->r,Visit)) return OK;
  return ERROR;
  }else return OK;
  }

  Status SearchBST(BiTree T,KeyType key,BiTree f,BiTree *p){

  if(!T) {*p=f;return FALSE;}
  else if EQ(key,T->data){ *p=T;return TRUE;}
  else if LT(key,T->data) SearchBST(T->l,key,T,p);
  else SearchBST(T->r,key,T,p);
  }

  Status InsertBST(BiTree *T,ElemType e){
  BiTree p;
  BiTree s;
  if(!SearchBST(*T,e,NULL,&p)){
  s=(BiTree)malloc(sizeof(BiNode));
  s->data=e;s->l=s->r=NULL;
  if(!p) *T=s;
  else if (LT(e,p->data)) p->l=s;
  else p->r=s;
  return TRUE;
  }
  else return FALSE;
  }

  void Delete(BiTree *p){
  BiTree q,s;
  if(!(*p)->r){
  q=(*p);
  (*p)=(*p)->l;
  free(q);
  }
  else if(!(*p)->l){
  q=(*p);
  (*p)=(*p)->r;
  free(q);
  }
  else {

  /* q=(*p);
  s=(*p)->l;
  while(s->r) {q=s; s=s->r;}
  (*p)->data=s->data;
  if(q!=(*p) ) q->r=s->l;
  else q->l=s->l;
  free(s);
  */

  q=s=(*p)->l;
  while(s->r) s=s->r;
  s->r=(*p)->r;
  free(*p);
  (*p)=q;

  }
  }

  Status DeleteBST(BiTree *T,KeyType key){
  if (!(*T) )
  {return FALSE;}
  else{
  if ( EQ(key,(*T)->data)) Delete(T);
  else if ( LT(key,(*T)->data)) DeleteBST( &((*T)->l), key);
  else DeleteBST( &((*T)->r),key);
  return TRUE;
  }
  }

  main()
  {
  BiTree root;
  BiTree sroot=NULL;
  int i;
  int a[10]={45,23,12,3,33, 27,56,90,120,62};
  system("cls");
  CreateBiTree(&root);
  printf("PreOrderTraverse:\n");
  PreOrderTraverse(root,printelem);
  printf("InOrderTraverse:\n");
  InOrderTraverse(root,printelem);
  for(i=0;i<10;i++)
  InsertBST(&sroot,a[i]);
  printf("InOrderTraverse:\n");
  InOrderTraverse(sroot,printelem);
  for(i=0;i<3;i++)
  DeleteBST(&sroot,a[i]);
  printf("Now sroot has nodes:\n");
  InOrderTraverse(sroot,printelem);
  }

热心网友 时间:2023-10-10 13:13

#include
<stdio.h>
typedef
int
KeyType;
typedef
struct{
KeyType
key;
int
maths;
int
english;
}ElemType;
#define
EQ(a,b)
((a)==(b))
#define
LT(a,b)
((a)<
(b))
#define
LQ(a,b)
((a)<=(b))
typedef
struct
{
ElemType
*elem;
int
length;
}SSTable;
int
Search_Seq(SSTable
ST,KeyType
key)
{
int
i;
ST.elem[0].key=key;
for(i=ST.length;
!EQ(ST.elem[i].key,key);
--i);
return
i;
}
int
Search_Bin(SSTable
ST,KeyType
key)
{
int
low,mid,high;
low=1;high=ST.length;
while(low<=high){
mid=(low+high)/2;
if
EQ(key,ST.elem[mid].key)
return
mid;
else
if
LT(key,ST.elem[mid].key)
high=mid
-1;
else
low=mid
+1;
}
}
getdata(SSTable
*
t)
{
FILE
*fp;
int
i=1;
fp=fopen("stu.txt","r");
fscanf(fp,"%d",&(t->length));
while(i<=t->length)
{
fscanf(fp,"%d
%d
%d",&(t->elem[i].key),
&(t->elem[i].maths),&(t->elem[i].english)
);
i++;
}
fclose(fp);
}
main()
{
ElemType
stu[50];
SSTable
class;
int
i,j,k;
long
time;
class.elem=stu;
getdata(&class);
printf("This
class
has
%d
students.\n",class.length);
printf("Input
stuno
you
want
search:\n");
scanf("%d",&k);
i=Search_Seq(class,k);
j=Search_Bin(class,k);
printf("Maths
English\n");
printf("%d
%d\n",class.elem[i].maths,class.elem[i].english);
printf("%d
%d\n",class.elem[j].maths,class.elem[j].english);
for(i=1;i<=4;i++)
{j=stu[i].maths+stu[i].english;
printf("%d\n",j);
}
}
二叉排序树
示例
#include
<alloc.h>
#define
ERROR
0;
#define
FALSE
0;
#define
TRUE
1;
#define
OK
1;
typedef
int
ElemType;
typedef
int
Status;
typedef
int
KeyType;
#define
EQ(a,b)
((a)==(b))
#define
LT(a,b)
((a)<
(b))
#define
LQ(a,b)
((a)<=(b))
typedef
struct
BinaryTree
{
ElemType
data;
struct
BinaryTree
*l;
struct
BinaryTree
*r;
}*BiTree,BiNode;
BiNode
*
new()
{
return(
(BiNode
*)malloc(sizeof(BiNode))
);
}
CreateSubTree(BiTree
*T,ElemType
*all,int
i)
{
if
((all[i]==0)||i>16)
{
*T=NULL;
return
OK;
}
*T=new();
if(*T==NULL)
return
ERROR;
(*T)->data=all[i];
CreateSubTree(&((*T)->l),all,2*i);
CreateSubTree(&((*T)->r),all,2*i+1);
}
CreateBiTree(BiTree
*T)
{
ElemType
all[16]={0,1,2,3,0,0,4,5,0,0,0,0,6,0,0,0,};
CreateSubTree(T,all,1);
}
printelem(ElemType
d)
{
printf("%d\n",d);
}
PreOrderTraverse(BiTree
T,int
(*Visit)(ElemType
d))
{
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->l,Visit))
if(PreOrderTraverse(T->r,Visit))
return
OK;
return
ERROR;
}
else
return
OK;
}
InOrderTraverse(BiTree
T,int
(*Visit)(ElemType
d))
{
if(T){
if(InOrderTraverse(T->l,Visit))
if(Visit(T->data))
if(InOrderTraverse(T->r,Visit))
return
OK;
return
ERROR;
}else
return
OK;
}
Status
SearchBST(BiTree
T,KeyType
key,BiTree
f,BiTree
*p){
if(!T)
{*p=f;return
FALSE;}
else
if
EQ(key,T->data){
*p=T;return
TRUE;}
else
if
LT(key,T->data)
SearchBST(T->l,key,T,p);
else
SearchBST(T->r,key,T,p);
}
Status
InsertBST(BiTree
*T,ElemType
e){
BiTree
p;
BiTree
s;
if(!SearchBST(*T,e,NULL,&p)){
s=(BiTree)malloc(sizeof(BiNode));
s->data=e;s->l=s->r=NULL;
if(!p)
*T=s;
else
if
(LT(e,p->data))
p->l=s;
else
p->r=s;
return
TRUE;
}
else
return
FALSE;
}
void
Delete(BiTree
*p){
BiTree
q,s;
if(!(*p)->r){
q=(*p);
(*p)=(*p)->l;
free(q);
}
else
if(!(*p)->l){
q=(*p);
(*p)=(*p)->r;
free(q);
}
else
{
/*
q=(*p);
s=(*p)->l;
while(s->r)
{q=s;
s=s->r;}
(*p)->data=s->data;
if(q!=(*p)
)
q->r=s->l;
else
q->l=s->l;
free(s);
*/
q=s=(*p)->l;
while(s->r)
s=s->r;
s->r=(*p)->r;
free(*p);
(*p)=q;
}
}
Status
DeleteBST(BiTree
*T,KeyType
key){
if
(!(*T)
)
{return
FALSE;}
else{
if
(
EQ(key,(*T)->data))
Delete(T);
else
if
(
LT(key,(*T)->data))
DeleteBST(
&((*T)->l),
key);
else
DeleteBST(
&((*T)->r),key);
return
TRUE;
}
}
main()
{
BiTree
root;
BiTree
sroot=NULL;
int
i;
int
a[10]={45,23,12,3,33,
27,56,90,120,62};
system("cls");
CreateBiTree(&root);
printf("PreOrderTraverse:\n");
PreOrderTraverse(root,printelem);
printf("InOrderTraverse:\n");
InOrderTraverse(root,printelem);
for(i=0;i<10;i++)
InsertBST(&sroot,a[i]);
printf("InOrderTraverse:\n");
InOrderTraverse(sroot,printelem);
for(i=0;i<3;i++)
DeleteBST(&sroot,a[i]);
printf("Now
sroot
has
nodes:\n");
InOrderTraverse(sroot,printelem);
}

热心网友 时间:2023-10-10 13:13

建议您可以参考 清华 严蔚敏 的 数据结构书 。

我写的有现成的 满足你二叉树构建、查找、插入、删除要求的程序 如果需要可以留下邮箱,但是仅仅是简陋的算法而已,刚刚能跑。

热心网友 时间:2023-10-10 13:14

o;iuoiup viyp p p ipi p
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 火锅餐厅厨房有哪些 小火锅厨房设备有哪些 盈点通10元投资是真的吗?有人玩过没?能赚钱? 各位网友,网上打的小广告就是福彩说投资十几块就能赚几十块,这是不是骗人的? 有谁做过网上投十元跟导师转钱的? 网上打那个小广告教人赚钱,投资十几元就能赚几百块。这个是真的吗?网友是不是骗人的?请问, 解决大量化肥农药的使用造成的农田环境污染等问题可采取哪些措施 贵阳龙洞堡国际机场的取得荣誉 贵阳机场通地铁了吗? 贵阳火车站有到龙洞堡机场的机场大巴吗 首都机场要修t4航站楼了吗? 贵阳机场t1和t2连通吗 江西一座4E级机场将扩建,规划新建3条跑道,何时开工呢? 天府机场t3t4航站楼什么时候建 深圳机场t4工程什么时候开工 切换为平板模式以后,手指触摸屏操作没有反应是什么情况呢? 暴走王者是手游吗 腾讯暴走王者是不是手游 请问,我这里有哪些英雄是暴走王者给我的免费英雄? 腾讯暴走王者艾斯德斯厉害吗 艾斯德斯技能出装介绍 暴走王者火炎魔女朱丽丝食用心得??? 暴走王者傲慢之罪·米淑珠是什么动漫人物 暴走王者是什么游戏 如何查看电脑是否欠费 宽带欠费怎么电脑怎么显示? iPhone 7Plus屏幕花屏是排线坏了吗?西城正规的iPhone手机售后维修点在哪? 苹果7plus屏幕花了有办法修复吗 怎么查电脑是否欠费 电脑怎么看网卡是否停机? 联想H12和联想H16蓝牙耳机哪个好 电脑突然连不上网,是不是电话欠费了 电脑连接不上网络是欠费还是连接器没连好? 宽带上不了,是否欠费了,咋么查? 电脑用的蓝牙耳机,哪款比较好,立体声,噪音小,价格比较实惠,帮我推荐几款?谢谢 蓝牙耳机什么牌子的好h 盘点豆瓣电视剧排行榜,【在线观看】免费百度云资源 盘点豆瓣电视剧排行榜前十名,【在线观看】免费百度云资源 跪求豆瓣最新电视剧排行榜,【免费高清】在线观看百度网盘资源 评价秦始皇(全面,好坏) 怎样评价秦始皇??? 评价秦始皇100字左右 上海离职后公积金怎么取 女人血压50到90正常吗