白狼Runner hu58666
爱跑步的DOTAER
关注数: 81 粉丝数: 226 发帖数: 4,674 关注贴吧数: 66
数据结构实验六 #include <stdio.h> #include <stdlib.h> #include <string.h> int n; typedef struct student{ char num[20]; char name[25]; int score; }*Stu,StuNode; void Build(Stu stu) { FILE *fp; char name[20]; int score,i; char num[20]; fp=fopen("E:\\Student.txt","w"); printf("请输入学生人数:"); scanf("%d",&n); printf("请输入学生信息(学号,姓名,成绩):\n"); for(i=1;i<=n;i++) { scanf("%s %s %d",num,name,&score); fprintf(fp,"%s %s %d\n",num,name,score); } printf("登录成功.\n"); fclose(fp); } void ReadFile(Stu &stu) {//读文件,存到Stu结构体中 FILE *fp; int i; stu=(Stu)malloc(sizeof(StuNode)*(n+1)); fp=fopen("E:\\Student.txt","r"); for(i=1;i<=n;i++) fscanf(fp,"%s %s %d",stu[i].num,stu[i].name,&stu[i].score); fclose(fp); } void Display(Stu stu) {//显示数据 int i; int temp=1,index=0; for(i=1;i<=n;i++) { printf("%2d %15s %15s %5d\n",temp,stu[i].num,stu[i].name,stu[i].score); if(i<n && stu[i].score==stu[i+1].score) index++; else { temp+=index+1; index=0; } } free(stu); } void Swap(StuNode &a,StuNode &b) { StuNode temp; temp=a; a=b; b=temp; } void InsertSort(Stu stu) {//直接插入排序 int i,j; int key; char name[20]; char num[20]; StuNode temp; stu=(Stu)malloc(sizeof(StuNode)*(n+1)); ReadFile(stu); for(i=n;i>=1;i--) { temp=stu[i]; j=i-1; while(j>=1 && temp.score> stu[j].score) { stu[j+1]=stu[j]; j--; } j+=1; stu[j]=temp; } Display(stu); } void BubbleSort(Stu stu) {//冒泡排序 int i,j,peace; stu=(Stu)malloc(sizeof(StuNode)*(n+1)); ReadFile(stu); peace=1; for(i=1;i<=n-1 && peace;i++) { peace=0; for(j=1;j<=n-j;j++) { if(stu[j].score < stu[j+1].score) { Swap(stu[j],stu[j+1]); peace=1; } } } Display(stu); } int Partition(Stu stu,int low,int high) {//快速排序--排序 int Pi; stu[0]=stu[low]; Pi=stu[0].score; while(low<high) { while(low<high && stu[high].score<=Pi) high--; stu[low]=stu[high]; while(low<high && stu[low].score>=Pi) low++; stu[high]=stu[low]; } stu[low]=stu[0]; return low; } void QuickSort(Stu stu,int low,int high) {//快速排序--二分 int Pi; if(low<high) { Pi=Partition(stu,low,high); QuickSort(stu,low,Pi-1); QuickSort(stu,Pi+1,high); } } void SeletionSort(Stu stu) {//选择排序 int i,j,temp; stu=(Stu)malloc(sizeof(StuNode)*(n+1)); ReadFile(stu); for(i=1;i<=n-1;i++) { int key=stu[i].score; for(j=i+1;j<=n;j++) { if(key<stu[j].score) { temp=j; key=stu[j].score; } } if(i!=j) Swap(stu[i],stu[temp]); } Display(stu); } void HeapAdjust(Stu stu,int s,int m) {//调整堆 int j; StuNode rc; rc=stu[s]; for(j=2*s;j<=m;j*=2) { if(j<m && stu[j].score>stu[j+1].score) j++; if(!(rc.score>stu[j].score)) break; stu[s]=stu[j]; s=j; } stu[s]=rc; } void HeapSort(Stu stu) {//堆排序 int i; ReadFile(stu); for(i=n/2;i>0;i--) HeapAdjust(stu,i,n); for(i=n;i>1;i--) { Swap(stu[1],stu[i]); HeapAdjust(stu,1,i-1); } Display(stu); } void Merge(Stu stu,int low,int mid,int high) {//归并排序--归并 if(low>=high) return ; int i,j,k; StuNode temp[1005]; i=low;j=mid+1;k=0; while(i<=mid && j<=high) { if(stu[i].score>stu[j].score) temp[k++]=stu[i++]; else temp[k++]=stu[j++]; } while(i<=mid) temp[k++]=stu[i++]; while(j<=high) temp[k++]=stu[j++]; for(i=low;i<=high;i++) { stu[i]=temp[i-low]; printf("%d ",stu[i].score); } putchar('\n'); } void MergeSort(Stu stu,int low,int high) {//归并排序--二分 if(low>=high) return ; int mid=(low+high)/2; MergeSort(stu,low,mid); MergeSort(stu,mid+1,high); Merge(stu,low,mid,high); } int main() { Stu stu; int key; while(1) { printf(" ----------------------\n"); printf(" 1.录入学生基本信息。\n"); printf(" 2.直接插入排序。\n"); printf(" 3.冒泡排序。\n"); printf(" 4.快速排序。\n"); printf(" 5.简单选择排序。\n"); printf(" 6.堆排序。\n"); printf(" 7.2-路归并排序。\n"); printf(" 8.输出学生信息。\n"); printf(" 9.退出。\n"); printf(" ----------------------\n"); scanf("%d",&key); switch(key) { case 1: Build(stu); break; case 2: InsertSort(stu); break; case 3: BubbleSort(stu); break; case 4: ReadFile(stu); QuickSort(stu,1,n); Display(stu); break; case 5: SeletionSort(stu); break; case 6: HeapSort(stu); break; case 7: ReadFile(stu); MergeSort(stu,1,n); Display(stu); break; case 8: ReadFile(stu); Display(stu); break; default: return 0; } } }
数据结构实验三 #include<stdio.h> #include<stdlib.h> #define Stack_size 100 #define Stackincreament 10 #define MAXQ_size 100 typedef struct Binode{ char data; struct Binode *lchild,*rchild; }Binode,*Bitree; typedef struct{ Bitree *base; int top; int stacksize; }sqstack; typedef struct{ Bitree *base; int front; int rear; }sqQueue; int Qfull(sqQueue &Q) { if((Q.rear+1)%MAXQ_size==Q.front) return 1; return 0; } void enQueue(sqQueue &Q,Bitree e) { if(Qfull(Q)) exit(0); Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXQ_size; } void initQueue(sqQueue &Q) { Q.base=(Bitree*)malloc(MAXQ_size*sizeof(Binode)); Q.front=Q.rear=0; } int Qempty(sqQueue &Q) { if(Q.rear==Q.front) return 1; return 0; } void outQueue(sqQueue &Q,Bitree &e) { if(Qempty(Q)) exit(0); e=Q.base[Q.front]; Q.front=(Q.front+1)%MAXQ_size; } void initstack(sqstack &s) { s.base=(Bitree*)malloc(Stack_size*sizeof(Bitree)); s.stacksize=Stack_size; if(!s.base) exit(0); s.top=0; } void push(sqstack &s,Bitree e) { if(s.top>=s.stacksize) { s.base=(Bitree*)realloc(s.base,(Stack_size+Stackincreament)*sizeof(Bitree)); if(!s.base) exit(0); s.stacksize+=Stackincreament; } s.base[s.top++]=e; } void pop(sqstack &s,Bitree &e) { if(s.top==0) return ; e=s.base[--s.top]; } void creatBiTree(Bitree &bt) { char ch; ch=getchar(); if(ch=='#') bt=NULL; else { bt=(Bitree)malloc(sizeof(Binode)); bt->data=ch; creatBiTree(bt->lchild); creatBiTree(bt->rchild); } } int stackempty(sqstack &s) { if(s.top==0) return 1; return 0; } Bitree Gettop(sqstack &s,Bitree &e) { if(stackempty(s)) exit(0); e=s.base[s.top-1]; return e; } void preorderTraverse1(Bitree &bt) { Bitree p; if(bt) { sqstack s; initstack(s); push(s,bt); while(!stackempty(s)) { while(Gettop(s,p)&&p) { printf("%c",p->data); push(s,p->lchild); } pop(s,p); if(!stackempty(s)) { pop(s,p); push(s,p->rchild); } } } printf("\n"); } void preorderTraverse2(Bitree bt) { if(bt) { printf("%c",bt->data); preorderTraverse2(bt->lchild); preorderTraverse2(bt->rchild); } } /*void inorderTraverse1(Bitree &bt) { if(bt) { preorderTraverse1(bt->lchild); preorderTraverse1(bt->rchild); } printf("%c",bt->data); }*/ void inorderTraverse2(Bitree &bt) { Bitree p; sqstack s; if(bt) { initstack(s); push(s,bt); while(!stackempty(s)) { while(Gettop(s,p)&&p) push(s,p->lchild); pop(s,p); if(!stackempty(s)) { pop(s,p); printf("%c",p->data); push(s,p->rchild); } } } printf("\n"); } void leafnum(Bitree bt,int &leaf) {//用栈实现 sqstack s; Bitree p; leaf=0; if(!bt) leaf=0; else { initstack(s); push(s,bt); while(!stackempty(s)) { while(Gettop(s,p)&&p) push(s,p->lchild); pop(s,p); Gettop(s,p); push(s,p->rchild); if(!Gettop(s,p)) { pop(s,p); leaf++; pop(s,p); printf("第%d个叶子结点为:%c\n",leaf,p->data); } if(!stackempty(s)) { Gettop(s,p); pop(s,p); push(s,p->rchild); } } } printf("该树的叶子数为:%d,总结点数为:%d\n",leaf,2*leaf-1); } void leveltraverse(Bitree bt) { sqQueue Q; Bitree p; if(bt) { initQueue(Q); enQueue(Q,bt); while(!Qempty(Q)) { outQueue(Q,p); printf("%c",p->data); if(p->lchild) enQueue(Q,p->lchild); if(p->rchild) enQueue(Q,p->rchild); } } printf("\n"); } void Depth(Bitree bt,int &depth) {//二叉树的深度 Bitree p; sqQueue Q; int hp,tp,lc; initQueue(Q); if(bt) { hp=tp=depth=0; Q.base[tp++]=bt; lc=tp; while(hp<tp) { p=Q.base[hp++]; if(p->lchild) Q.base[tp++]=p->lchild; if(p->rchild) Q.base[tp++]=p->rchild; if(lc==hp) { depth++; lc=tp; } } } printf("该树的高度为:%d\n",depth); } int judge(Bitree bt) {//判断是否为完全二叉树 int flag=0; Bitree p; sqQueue Q; if(!bt) return 1; initQueue(Q); enQueue(Q,bt); while(!Qempty(Q)) { outQueue(Q,p); if(p->lchild&&!flag) enQueue(Q,p->lchild); else if(p->lchild) return 0; else flag=1; if(p->rchild&&!flag) enQueue(Q,p->rchild); else if(p->rchild) return 0; else flag=1; } return 1; } void storage(Bitree bt) {//将二叉树结点存入一维数组 char a[100]; int i=1,k=1; int Q1[100],front=0,rear=0; Bitree p; sqQueue Q; for(i=1;i<=100;i++) a[i]='#'; if(!bt) return; else{ initQueue(Q); enQueue(Q,bt); Q1[rear++]=k; while(!Qempty(Q)) { outQueue(Q,p); k=Q1[front++]; a[k]=p->data; if(p->lchild) { enQueue(Q,p->lchild); Q1[rear++]=2*k; } if(p->rchild) { enQueue(Q,p->rchild); Q1[rear++]=2*k+1; } } } for(int j=1;j<=front;j++) printf("%5c",a[j]); printf("\n"); } int main() { printf("请输入完全二叉树的先序序列:\n"); int leaf,depth; Bitree bt; creatBiTree(bt); preorderTraverse1(bt); preorderTraverse2(bt); printf("\n"); inorderTraverse2(bt); leveltraverse(bt); leafnum(bt,leaf); Depth(bt,depth); if(judge(bt)) printf("该树为完全二叉树.\n"); else printf("该树不是完全二叉树.\n"); storage(bt); return 0; }
DOTA2英雄攻略娜迦海妖-- 进入沉睡的海妖之歌2013-11-03 来源: DOTA2官方  娜迦海妖 - NAGA 英雄统称:(Naga,Naga Siren,小娜加,小娜迦)   英雄定位: 发育核心,团战, 推进,先手, 逃生   英雄介绍:   Slithice喜欢跨出大海的边界,找寻新的事物,作为娜迦族的一员,她永远过着流浪的生活。在旅途中她遇见了一个想成为剑圣的年轻半 兽人并同他共坠爱河。即使年轻的半兽人自己也没有什么实战经验,他还是教授了Slithice许多半兽人故老相传的战斗技巧。在他们一起度过的甜 蜜时光中,她还从当地的骑兵那里学会了如何设置陷阱。然而一切的幸福都随着天灾军团的到来化为泡影,她的爱人在她面前被杀害,她使用娜迦 族的沉睡魔法得以逃脱。现在,她把她的一切投入到对抗天灾军团的战斗中,为了她心中永不会磨灭的爱! 初始生命值 549/549 初始魔法值 234/234 射程:近战 移动速度:320 攻击 44 - 46 力量 21(+2.3) 攻速 1.4+21% →敏捷 21(+2.8) 护甲 5.9 智力 18(+2.0)   娜迦海妖技能介绍     镜像   (R)   创造具有攻击力的娜迦海妖的镜像来迷惑敌人。4级。   等级1 - 创造3个镜像,镜像受到600%的伤害,拥有本体30%的攻击力。持续时间:30秒   等级2 - 创造3个镜像,镜像受到500%的伤害,拥有本体35%的攻击力。持续时间:30秒   等级3 - 创造3个镜像,镜像受到400%的伤害,拥有本体40%的攻击力。持续时间:30秒   等级4 - 创造3个镜像,镜像受到300%的伤害,拥有本体45%的攻击力。持续时间:30秒   等级1: 魔法消耗70点,施法间隔50秒。   等级2: 魔法消耗80点,施法间隔50秒。   等级3: 魔法消耗90点,施法间隔50秒。   等级4: 魔法消耗100点,施法间隔50秒。     诱捕   (E)   用一道网捕捉住目标,使其不能移动。施法距离:620/630/640/650 无视魔法免疫   等级1 - 持续2秒。   等级2 - 持续3秒。   等级3 - 持续4秒。   等级4 - 持续5秒。   等级1: 魔法消耗75点,施法间隔14秒。   等级2: 魔法消耗85点,施法间隔14秒。   等级3: 魔法消耗95点,施法间隔14秒。   等级4: 魔法消耗115点,施法间隔14秒。     激流   (C)   娜迦海妖和她的镜像用具有破坏力的水波攻击周围所有敌方单位,并削弱他们的护甲。 冷却时间:19/16/13/10s   护甲降低:2/3/4/5   伤害:130/160/190/220     海妖之歌   (G)   娜迦海妖迷人的歌声使附近的敌方单位进入深沉的睡眠。他们在睡眠中处于无敌状态。作用范围:1000/1500/2000   等级1 - 持续6秒。   等级2 - 持续7秒。   等级3 - 持续8秒。   等级1: 魔法消耗200点,施法间隔120秒。   等级2: 魔法消耗200点,施法间隔120秒。   等级3: 魔法消耗200点,施法间隔120秒。   娜迦海妖技能加点方式   常规技能加点方式      现在激流的加强让这个技能优先级很高,而诱捕的控制前期也要加一两级,分身可以加一级多技能,大招无论逃生还是留人都是神技,必 须加。    娜迦海妖出装套路   出门装      娜迦前期发育顺畅可以直接考虑林肯,如果很逆风可以考虑灵魂之戒加绿鞋的打法    中期核心装      林肯作为恢复的道具非常全面,又能给娜迦带来安全,也能让她持续刷钱,目前很多战队都喜欢这样出装,分身继承散失让娜迦DPS瞬间提 高。    后期神装      由于60散失和分身合成分离,但这两物品对NAGA的作用都是非常大的;分身技能加分身斧,加上网以后瞬间就可以秒掉对手;辉耀可以最 大程度上发挥分身带线的特点,一个龙芯辉耀娜迦的分身会让所有法师都很头疼
1 下一页