天津理工大学实验报告模板
天津理工大学数据结构实验报告4

附录(可包括源程序清单或其它说明)#include <stdio.h>#include <string>#define MAX_NAME 10#define MAX_INFO 80typedef char InfoType;typedef char V ertexType[MAX_NAME]; // 字符串类型#define MAX_VERTEX_NUM 20typedef enum{unvisited,visited}VisitIf;typedef struct EBox{VisitIf mark; // 访问标记int ivex,jvex; // 该边依附的两个顶点的位置struct EBox *ilink,*jlink; // 分别指向依附这两个顶点的下一条边InfoType *info; // 该边信息指针}EBox;typedef struct{V ertexType data;EBox *firstedge; // 指向第一条依附该顶点的边}V exBox;typedef struct{V exBox adjmulist[MAX_VERTEX_NUM];int vexnum,edgenum; // 无向图的当前顶点数和边数}AMLGraph;typedef int QElemType;typedef struct QNode{// 单链表的链式存储结构QElemType data; //数据域struct QNode *next; //指针域}QNode,*QueuePtr;typedef struct{QueuePtr front,//队头指针,指针域指向队头元素rear; //队尾指针,指向队尾元素}LinkQueue;// 若G中存在顶点u,则返回该顶点在无向图中位置;否则返回-1int LocateV ex(AMLGraph G,V ertexType u){int i;for(i=0;i<G.vexnum;++i)if(strcmp(u,G.adjmulist[i].data)==0)return i;return -1;}int CreateGraph(AMLGraph *G){ // 采用邻接表存储结构,构造无向图G int i,j,k,l,IncInfo;char s[MAX_INFO];V ertexType va,vb;EBox *p;printf("请输入无向图G的顶点数,边数: ");scanf("%d,%d",&(*G).vexnum,&(*G).edgenum);printf("请输入%d个顶点的值(<%d个字符):\n",(*G).vexnum,MAX_NAME);for(i=0;i<(*G).vexnum;++i){ // 构造顶点向量scanf("%s",(*G).adjmulist[i].data);(*G).adjmulist[i].firstedge=NULL;}printf("请顺序输入每条边的两个端点(以空格作为间隔):\n");for(k=0;k<(*G).edgenum;++k){// 构造表结点链表scanf("%s%s%*c",va,vb); // %*c吃掉回车符i=LocateV ex(*G,va); // 一端j=LocateV ex(*G,vb); // 另一端p=(EBox*)malloc(sizeof(EBox));p->mark=unvisited; // 设初值p->ivex=i;p->jvex=j;p->info=NULL;p->ilink=(*G).adjmulist[i].firstedge; // 插在表头(*G).adjmulist[i].firstedge=p;p->jlink=(*G).adjmulist[j].firstedge; // 插在表头(*G).adjmulist[j].firstedge=p;}return 1;}V ertexType* GetVex(AMLGraph G,int v){ // 返回v的值if(v>=G.vexnum||v<0)exit(0);return &G.adjmulist[v].data;}// 返回v的第一个邻接顶点的序号。
天津理工大学数据结构实验报告1

r=L;
L->data=1;
L->next=NULL;
for(int i=2;i<=n;i++){
p=(LinkList)malloc(sizeof(LNode));
p->data=i;
p->next=NULL;
2. 运用单循环链表结构实现约瑟夫环问题:
设计工作指针p指向当前计数结点,为实现删除结点p的操作,再设计辅助工作结点q指向结点p的后继结点,计数器从1开始计数。其算法的伪代码如下:
2.1工作指针p初始化,计数器count初始化:
p=L;count=1;
2.2输出单循环链表中的每一个元素;
r->next=p;
r=p;
}
r->next=L;
}
void Josephus(LinkList &L,int s,int m){
LinkList p,q;
int count=1,t;
p=L;
for(int i=1;i<s;i++)
p=p->next;
while(p->next!=p){
交换p与q所指结点的值并删除结点q,即删除了结点p所指元素;
计数器变为1;
2.3.2 工作指针p后移,计数器count+1;
2.4输出链表中剩余的最后一个结点,并删除。
3. 在主函数中调用各个函数,完成程序。
结论:
实验中,输入9,1,5,输出5 1 7 4 3 6 9 2 8,
2
天津理工大学理学专业实习总结报告范文模板

实习报告理学专业姓名:巴菲特学号:20170921009 专业:理学班级:理学01班指导老师:巴菲特实习时间:XXXX-XX-XX—XXXX-XX-XX 20XX年XX月XX日目录目录 (2)前言 (3)一、实习目的及任务 (3)1.1实习目的 (3)1.2实习任务要求 (3)二、实习单位(岗位)简介 (4)2.1实习时间 (4)2.2实习单位(岗位)简介 (4)三、实习内容 (5)3.1熟悉工作流程与工作程序 (5)3.2培养工作实践能力和基本人际关系处理能力 (6)3.3强化岗位专业知识的理解与运用能力 (6)四、实习心得体会 (7)4.1人生角色的转变 (7)4.2个人能力的提高 (7)4.3人际关系的拓展 (7)五、实习总结 (8)5.1实践是检验真理的标准 (8)5.2团队,个人成长的催化剂 (8)5.3良好的心态是学习工作中的基石 (9)5.4学无止境,贵在坚持 (9)前言毕业实习是大学教育最后一个极为重要的实践性教学环节。
通过实习,一方面,使自己接触实际,了解社会,增强劳动观点和事业心、责任感;第二方面,使自己在社会实践中接触与本专业相关的实际工作,增强感性认识,培养和锻炼综合运用所学的基础理论、基本技能和专业知识,提高独立分析和解决实际问题的能力,把理论和实践结合起来,提高实践动手能力,为自己毕业后走上工作岗位打下一定的基础;第三方面,通过实习还可以检验学习效果,为进一步提高教育学习质量,培养个人能力积累经验。
一、实习目的及任务1.1实习目的通过实习实践,能系统运用所掌握的经济、管理、法规等知识,在实习单位的生产、经营、管理和商贸等实践活动中,通过不断学习与训练,掌握一定的实践知识与技能,并对生产、经营及人际沟通有一定的切身体验,以期培养独立思考、工作的能力,使自己成为适应社会需要的合格的理学专业人才。
1.2实习任务要求1.2.1 巩固和掌握运用理学基本理论、基本方法和基本技能;1.2.2熟悉所在实习单位的工作流程与工作程序;。
天津理工大学_操作系统_存储器的分配与回收算法实现_实验报告

实验报告学院(系)名称:计算机与通信工程学院【实验过程记录(源程序、测试用例、测试结果及心得体会等)】源程序:MemoryBlock.java://内存块类,包含各种操作public class MemoryBlock {static final int BLOCK_SIZE = 4096;private int baseBlock; //内存块基地址private int blockNum; //大小private boolean inUse; //是否已分配private MemoryBlock prev, next;public MemoryBlock(int blockNum) {this.baseBlock = 0;this.blockNum = blockNum;inUse = false;prev = null;next = null;}public MemoryBlock(int base, int blockNum) {this.baseBlock = base;this.blockNum = blockNum;inUse = false;prev = null;next = null;}public int getBlockNum() {return blockNum;}public void setBlockNum(int blockNum) {this.blockNum = blockNum;}public MemoryBlock getPrev() {return prev;}public void setPrev(MemoryBlock prev) {this.prev = prev;public MemoryBlock getNext() {return next;}public void setNext(MemoryBlock next) {this.next = next;}public boolean inUse() {return inUse;}public void setUse() {inUse = true;}public void free() {inUse = false;}public int getBaseBlock() {return baseBlock;}public void setBaseBlock(int baseBlock) { this.baseBlock = baseBlock;}//分配内存块,如果可分配,则返回剩余内存块public MemoryBlock allocate(int blockNum) { if(this.blockNum - blockNum>0) {int newBase = baseBlock + blockNum;int newBlock = this.blockNum-blockNum;this.blockNum = blockNum;setUse();return new MemoryBlock(newBase, newBlock);}else if(this.blockNum - blockNum ==0) {this.blockNum = 0;}return null;}//判断内存块是否能合并public boolean merge(MemoryBlock memBlock) {if(baseBlock+blockNum==memBlock.getBaseBlock()) {setBlockNum(blockNum+memBlock.blockNum);memBlock.setBaseBlock(0);memBlock.setBlockNum(0);return true;}elsereturn false;}@Overridepublic String toString() {String inUse = null;if(inUse())inUse = "已分配";else inUse = "未分配";return"内存块 [基地址=" + baseBlock + ", 大小=" + blockNum +", " + inUse + "]";}}MemoryTable.java://虚类MemTable,提供内存链表的各种基本方法public abstract class MemoryTable {//MemoryBlock链表表头protected MemoryBlock memList;public MemoryTable(int blockNum) {memList = new MemoryBlock(0, blockNum);}//把newBlock插入到memBlock前面public void insertBefore(MemoryBlock memBlock, MemoryBlock newBlock){if(memBlock.getPrev() != null)memBlock.getPrev().setNext(newBlock);if(memList == memBlock)memList = newBlock;newBlock.setPrev(memBlock.getPrev());newBlock.setNext(memBlock);memBlock.setPrev(newBlock);}//在memBlock后插入newBlockpublic void insert(MemoryBlock memBlock, MemoryBlock newBlock) { if(memBlock.getNext() != null)memBlock.getNext().setPrev(newBlock);newBlock.setNext(memBlock.getNext());memBlock.setNext(newBlock);newBlock.setPrev(memBlock);}//删除块的连接关系,但不释放块public void remove(MemoryBlock memBlock) {if(memBlock == memList)memList = memBlock.getNext();if(memBlock.getNext()!=null)memBlock.getNext().setPrev(memBlock.getPrev());if(memBlock.getPrev()!=null)memBlock.getPrev().setNext(memBlock.getNext());}public void print() {MemoryBlock memBlock = memList;int i=0;while(memBlock != null) {System.out.print(i+" ");System.out.println(memBlock);i++;memBlock = memBlock.getNext();}}//合并邻接的空闲内存public void merge(MemoryBlock newBlock) {MemoryBlock memBlock = memList;while(memBlock != null) {if(!memBlock.inUse()) {if(memBlock.merge(newBlock)) {memBlock.setBlockNum( memBlock.getBlockNum() +newBlock.getBlockNum());remove(newBlock);break;}if(newBlock.merge(memBlock)) {newBlock.setBlockNum( newBlock.getBlockNum() + memBlock.getBlockNum());break;}}memBlock = memBlock.getNext();}}//分配内存(抽象函数)public abstract boolean allocate(int blockNum);//释放内存(抽象函数)public abstract boolean free(int baseBlock);}FirstFit.java:public class FirstFit extends MemoryTable{public FirstFit(int blockNum) {super(blockNum);}@Overridepublic boolean allocate(int blockNum) {MemoryBlock memBlock = memList;while(memBlock!=null) {if(!memBlock.inUse()) {if(memBlock.getBlockNum()>blockNum) {MemoryBlock newBlock = memBlock.allocate(blockNum);insert(memBlock, newBlock);return true;}else if(memBlock.getBlockNum()==blockNum) {memBlock.setUse();}}memBlock = memBlock.getNext();}return false;}//分配内存(类内使用)void freeMemory(MemoryBlock freeBlock) {MemoryBlock prev = freeBlock.getPrev();MemoryBlock next = freeBlock.getNext();freeBlock.free();while(!prev.inUse() && (prev.merge(freeBlock))) {prev.setBlockNum( prev.getBlockNum() +freeBlock.getBlockNum());remove(freeBlock);freeBlock = prev;if(freeBlock.getPrev()!=null)prev = freeBlock.getPrev();else return;}}if(freeBlock.getNext()!=null) {while(!next.inUse() && (freeBlock.merge(next))) {freeBlock.setBlockNum ( next.getBlockNum() +freeBlock.getBlockNum());remove(next);freeBlock = next;if(freeBlock.getNext()!=null)next = freeBlock.getNext();else return;}}}@Overridepublic boolean free(int baseBlock) {MemoryBlock memBlock = memList;while(memBlock != null) {if(memBlock.getBaseBlock() == baseBlock) {freeMemory(memBlock);return true;}memBlock = memBlock.getNext();}return false;}}BestFit.java:public class BestFit extends MemoryTable {private MemoryBlock usedMemory;public BestFit(int blockNum) {super(blockNum);usedMemory = null;}@Overridepublic boolean allocate(int blockNum) {MemoryBlock memBlock = memList;MemoryBlock minBlock = null;for(;memBlock!=null; memBlock = memBlock.getNext()) { if(!memBlock.inUse()&&(memBlock.getBlockNum()>=blockNum)) { minBlock = memBlock;break;}}if(minBlock != null) {remove(minBlock);if(minBlock.getBlockNum()!=blockNum) {MemoryBlock newBlock = minBlock.allocate(blockNum);insertUnused(newBlock);}insertUsed(minBlock);return true;}elsereturn false;}boolean freeMemory(MemoryBlock freeBlock) {if(freeBlock != null) {freeBlock.free();removeUsed(freeBlock);insertUnused(freeBlock);return true;}return false;}@Overridepublic boolean free(int baseBlock) {MemoryBlock memBlock = usedMemory;while(memBlock != null) {if(memBlock.getBaseBlock() == baseBlock) {freeMemory(memBlock);merge(memBlock);return true;}memBlock = memBlock.getNext();return false;}//在已分配链表删除public void removeUsed(MemoryBlock memBlock) {if(memBlock == usedMemory)usedMemory = memBlock.getNext();if(memBlock.getNext()!=null)memBlock.getNext().setPrev(memBlock.getPrev());if(memBlock.getPrev()!=null)memBlock.getPrev().setNext(memBlock.getNext());}//插入未分配链表void insertUnused(MemoryBlock newBlock) {if(memList == null)memList = newBlock;else {MemoryBlock memBlock = memList;MemoryBlock preBlock = null;while(memBlock!=null) {if(newBlock.getBlockNum()<=memBlock.getBlockNum()) { insertBefore(memBlock, newBlock);return;}preBlock = memBlock;memBlock = memBlock.getNext();}insert(preBlock, newBlock);}}//插入已分配链表void insertUsed(MemoryBlock newBlock) {if(usedMemory == null)usedMemory = newBlock;else {MemoryBlock memBlock = usedMemory;while(memBlock.getNext() != null)memBlock = memBlock.getNext();memBlock.setNext(newBlock);newBlock.setPrev(memBlock);}}public void print() {super.print();MemoryBlock memBlock = usedMemory;int i=0;while(memBlock != null) {System.out.print(i+" ");System.out.println(memBlock);i++;memBlock = memBlock.getNext();}}}WorstFit.java:public class WorstFit extends MemoryTable {//已分配链表private MemoryBlock usedMemory;public WorstFit(int blockNum) {super(blockNum);usedMemory = null;}@Overridepublic boolean allocate(int blockNum) {MemoryBlock maxBlock = memList;if(maxBlock.getBlockNum()<blockNum)return false;remove(maxBlock);if(maxBlock.getBlockNum()!=blockNum) {MemoryBlock newBlock = maxBlock.allocate(blockNum);insertUnused(newBlock);}insertUsed(maxBlock);return true;}boolean freeMemory(MemoryBlock freeBlock) {if(freeBlock != null) {freeBlock.free();removeUsed(freeBlock);insertUnused(freeBlock);}return false;}@Overridepublic boolean free(int baseBlock) {//已分配链表MemoryBlock memBlock = usedMemory;while(memBlock != null) {if(memBlock.getBaseBlock() == baseBlock) {freeMemory(memBlock);merge(memBlock);return true;}memBlock = memBlock.getNext();}return false;}public void removeUsed(MemoryBlock memBlock) {if(memBlock == usedMemory)usedMemory = memBlock.getNext();if(memBlock.getNext()!=null)memBlock.getNext().setPrev(memBlock.getPrev());if(memBlock.getPrev()!=null)memBlock.getPrev().setNext(memBlock.getNext());}void insertUnused(MemoryBlock newBlock) {if(memList == null)memList = newBlock;else {MemoryBlock memBlock = memList;MemoryBlock preBlock = null;while(memBlock!=null) {if(newBlock.getBlockNum()>=memBlock.getBlockNum()) { insertBefore(memBlock, newBlock);return;}preBlock = memBlock;memBlock = memBlock.getNext();}insert(preBlock, newBlock);}}void insertUsed(MemoryBlock newBlock) {if(usedMemory == null)usedMemory = newBlock;else {MemoryBlock memBlock = usedMemory;while(memBlock.getNext() != null)memBlock = memBlock.getNext();memBlock.setNext(newBlock);newBlock.setPrev(memBlock);}}public void print() {super.print();MemoryBlock memBlock = usedMemory;int i=0;while(memBlock != null) {System.out.print(i+" ");System.out.println(memBlock);i++;memBlock = memBlock.getNext();}}}测试用例:Main.java:public class Main {public static void main(String[] args) {testFirstFit();System.out.println();testBestFit();System.out.println();testWorstFit();}public static void testFirstFit() {MemoryTable mem = new FirstFit(1024);System.out.println("测试首次适应法:");mem.allocate(512);mem.allocate(256);mem.allocate(128);mem.print();mem.free(512);mem.free(768);mem.print();}public static void testBestFit() {MemoryTable mem = new BestFit(1024);System.out.println("测试最佳适应法:");mem.allocate(1);mem.allocate(2);mem.allocate(3);mem.print();mem.free(0);mem.free(1);mem.print();}public static void testWorstFit() {MemoryTable mem = new WorstFit(1024);System.out.println("测试最坏适应法:");mem.allocate(1);mem.allocate(2);mem.allocate(3);mem.print();mem.free(0);mem.free(3);mem.print();}}测试结果:测试首次适应法:分配 512 内存分配 256 内存分配 128 内存内存单元:0 内存块 [基地址=0, 大小=512, 已分配]1 内存块 [基地址=512, 大小=256, 已分配]2 内存块 [基地址=768, 大小=128, 已分配]3 内存块 [基地址=896, 大小=128, 未分配]释放 512 处内存释放 768 处内存内存单元:0 内存块 [基地址=0, 大小=512, 已分配]1 内存块 [基地址=512, 大小=512, 未分配]测试最佳适应法:分配 1 内存分配 2 内存分配 3 内存内存单元:0 内存块 [基地址=6, 大小=1018, 未分配]0 内存块 [基地址=0, 大小=1, 已分配]1 内存块 [基地址=1, 大小=2, 已分配]2 内存块 [基地址=3, 大小=3, 已分配]释放 0 处内存释放 1 处内存内存单元:0 内存块 [基地址=0, 大小=3, 未分配]1 内存块 [基地址=6, 大小=1018, 未分配]0 内存块 [基地址=3, 大小=3, 已分配]测试最坏适应法:分配 1 内存分配 2 内存分配 3 内存内存单元:0 内存块 [基地址=6, 大小=1018, 未分配]0 内存块 [基地址=0, 大小=1, 已分配]1 内存块 [基地址=1, 大小=2, 已分配]2 内存块 [基地址=3, 大小=3, 已分配]释放 0 处内存释放 3 处内存内存单元:0 内存块 [基地址=3, 大小=1021, 未分配]1 内存块 [基地址=0, 大小=1, 未分配]0 内存块 [基地址=1, 大小=2, 已分配]心得体会:1.使用类来进行一些方法的重用2.释放内存时,根据不同的分配方法进行相邻的内存合并3.链表应根据具体情况优化从而简化代码。
天津理工大学编译原理实验2语法分析

天津理工大学编译原理实验2语法分析实验报告学院(系)名称:计算机与通信工程学院姓名学号专业班级实验项目实验二:语法分析课程名称编译原理课程代码2016年4月21日第1、2节实验时间 2016年4月26日第3、4节实验地点计算机软件实验室7-220 2016年4月28日第1、2节批改意见成绩教师签字: 实验内容:可选择LL1分析法、算符优先分析法、LR分析法之一,实现如下表达式文法的语法分析器:(1)E?E+T | E-T | T(2)T?T*F | T/F | F(3)F?P^F | P(4)P?(E) | i实验目的:1(掌握语法分析的基本概念和基本方法;2(正确理解LL1分析法、算符优先分析法、LR分析法的设计与使用方法。
实验要求:1(按要求设计实现能识别上述文法所表示语言的语法分析器,并要求输出全部分析过程;2(要求详细描述所选分析方法针对上述文法的分析表构造过程;3(完成对所设计语法分析器的功能测试,并给出测试数据和实验结果;4(为增加程序可读性,请在程序中进行适当注释说明;5(整理上机步骤,总结经验和体会;6(认真完成并按时提交实验报告。
第1页共13页【实验过程记录(源程序、测试用例、测试结果及心得体会等)】使用的是LL(1)分析法,其分析表的构造方法和构造过程如下: 实验源代码: #include<iostream>#include<cstring>#define size 1024using namespace std;int getLength(char str[size]) {int i=0;while(str[i]!='\0')i++;return i;}int getstringLength(string str) {int i=0;while(str[i]!='\0')i++;return i;}char gettop(char stack[size],int top) {if(stack[top]!='\0')return stack[top];elsereturn '#';}void popstack(char *stack,int *pointer){int p=*pointer;cout<<"\tPopup "<<stack[p]<<" out!";stack[p]='\0';(*pointer)--;}void pushstack(char *stack,int *pointer,string str) {int i=0;int length=getstringLength(str);cout<<" push "<<str<<" in stack reversed order."; for(i=length-1;i>=0;i--){(*pointer)++;第2页共13页stack[(*pointer)]=str[i];}}int getcol(char top) {switch(top){case '+':return 0;case '-':return 1;case '*':return 2;case '/':return 3;case '^':return 4;case ')':return 5;case '#':return 6;case '(':return 7;case 'i':return 8;default:cout<<"Error! This character string is not this grammer`s sentence."<<endl;return -1;}}void show(char str[size],int index){int length=getLength(str);if(index!=-1)cout<<"\t";for(int i=index+1;i<length;i++)cout<<str[i]; }int main(){char str[size];//接受字符串的数组char stack[size];//进行比对的栈int pointer=-1;//指向栈顶的指针int length=0;//记录字符串长度int index=0;//记录输入字符串第3页共13页char top;int i,j;//i表示行,j表示列string production;bool match=false;string table[7][9]={ // + - * / ^ ) # ( i/* E */ "error", "error", "error", "error", "error", "error", "error", "TX", "TX",/* X */ "+TX", "-TX", "error", "error", "error", "empty", "empty", "error", "error",/* T */ "error","error","error","error","error","error","error","FY","FY", /* Y */"empty","empty","*FY","/FY","error","empty","empty","error","error", /* F */ "error","error","error","error","error","error","error","PZ","PZ", /* Z */"empty","empty","empty","empty","^F","empty","empty","error","error", /* P */ "error","error","error","error","error","error","error","(E)","i"};cout<<"Please input character string: ";cin>>str;length=getLength(str);str[length]='#';str[length+1]='\0';// cout<<length<<endl;// cout<<table[0][0]; //已验证可以实现cout<<"符号栈\t当前符号\t输入串\t\t\t\t说明"<<endl;pointer++;stack[pointer]='#';pointer++;stack[pointer]='E';//初始化栈,使栈底是 #Ewhile(str[index]!='\0'){top=gettop(stack,pointer);switch(top){case 'E':i=0;//第1行j=getcol(str[index]);production=table[i][j];if(production=="error"){cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}else if(production=="empty"){cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);第4页共13页}else //说明可以进行分解非终结符{cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer,production);}break;case 'X':i=1;//第2行j=getcol(str[index]);production=table[i][j];if(production=="error"){cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}else if(production=="empty"){cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);}else //说明可以进行分解非终结符{cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer,production); }break;case 'T':i=2;//第3行j=getcol(str[index]);production=table[i][j];if(production=="error"){cout<<"Error! This character string is not this grammer`s sentence."<<endl;第5页共13页return 0;}else if(production=="empty"){cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);}else //说明可以进行分解非终结符{cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer,production);}break;case 'Y':i=3;//第4行j=getcol(str[index]);production=table[i][j];if(production=="error"){cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}else if(production=="empty"){cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);}else //说明可以进行分解非终结符{cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer,production);第6页共13页}break;case 'F':i=4;//第5行j=getcol(str[index]);production=table[i][j];if(production=="error"){cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}else if(production=="empty"){cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);}else //说明可以进行分解非终结符{cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer,production);}break;case 'Z':i=5;//第6行j=getcol(str[index]);production=table[i][j];if(production=="error"){cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}else if(production=="empty"){cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);第7页共13页}else //说明可以进行分解非终结符{cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer,production);}break;case 'P':i=6;//第7行j=getcol(str[index]);production=table[i][j];if(production=="error"){cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}else if(production=="empty"){cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);}else //说明可以进行分解非终结符{cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);popstack(stack,&pointer);pushstack(stack,&pointer,production); }break;case '+':switch(str[index]){case '+':cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";第8页共13页show(str,index);cout<<"\tMatch + ! ";//" Popup + and next char in."<<endl;popstack(stack,&pointer);match=true;break;default:cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}break;case '-':switch(str[index]){case '-':cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);cout<<"\tMatch - ! ";//Popup - and next char in."<<endl;popstack(stack,&pointer);match=true;break;default:cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}break;case '*':switch(str[index]){case '*':cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);cout<<"\tMatch * ! ";//Popup * and next char in."<<endl;popstack(stack,&pointer);match=true;break;default:cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}break;case '/':第9页共13页switch(str[index]){case '/':cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);cout<<"\tMatch / ! ";//Popup / and next char in."<<endl;popstack(stack,&pointer);match=true;break;default:cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}break;case '(':switch(str[index]){case '(':cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);cout<<"\tMatch ( ! ";//Popup ( and next char in."<<endl;popstack(stack,&pointer);match=true;break;default:cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}break;case ')':switch(str[index]){case ')':cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);cout<<"\tMatch ) ! ";//Popup ) and next char in."<<endl;popstack(stack,&pointer);match=true;break;第10页共13页default:cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}break;case '^':switch(str[index]){case '^':cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);cout<<"\tMatch ^ ! ";//Popup ^ and next char in."<<endl;popstack(stack,&pointer);match=true;break;default:cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}break;case 'i':switch(str[index]){case 'i':cout<<"\n";show(stack,-1);cout<<"\t"<<str[index]<<"\t";show(str,index);cout<<"\tMatch i ! ";//Popup i and next char in."<<endl;popstack(stack,&pointer);match=true;break;default:cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}break;case '#':switch(str[index]){case '#':cout<<"\n";show(stack,-1);第11页共13页cout<<"\t"<<str[index]<<"\t";show(str,index);cout<<"\tMatch # ! 分析成功~";//Popup # and next char in."<<endl;return 0;default:cout<<"Error! This character string is not this grammer`s sentence."<<endl;return 0;}break;}if(match){index++;match=false;}}return 0;}实验代码测试结果:下面图片是以给定文法画出的一个语法树。
天津理工大学数据结构实验报告3

实验(三)实验名称二叉树的遍历软件环境 Windows98/2000, VC++6.0或turbo C硬件环境PⅡ以上微型计算机实验目的 理解二叉树的逻辑特点,掌握二叉链表存储结构,掌握二茬树遍历算法的递归与非递归实现实验内容(应包括实验题目、实验要求、实验任务等)二叉树的遍历利用二叉链表作为存储结构建立一棵二叉树,每个结点中存放一种水果名(例如apple、orange、banana等,并要求从键盘输入),结点数不少于5个。
要求分别以先序、中序和后序进行遍历,输出遍历结果。
并编写一递归算法,交换该二叉树中所有结点的左、右孩子。
实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)实验步骤及算法描述和流程:1. 创建二叉链表的结点存储结构及数据的输入输出函数因为每个结点所存储的数据类型为字符串,却无法使用字符串和String等数据类型,所以使用单链表作为结点所存储的数据类型。
1.1 数据的输入函数indata( )当输入的字符不为'0'时,以尾插法将数据插入单链表。
1.2 数据的输出函数直接输出单链表。
2. 生成二叉链表利用先序遍历生成二叉链表:2.1 用单链表s记录输入的数据2.2 若单链表s为空,则二叉链表结点为空,否则根节点=s,利用递归调用分别生成根节点的左子树和右子树2.3 返回二叉链表3. 先序遍历、中序遍历、后序遍历二叉链表3.1 先序遍历:访问根节点,左子树,右子树的顺序3.2 中序遍历:访问左子树,根节点,右子树的顺序3.3 后序遍历:访问左子树,右子树,根节点的顺序利用递归调用分别用以上三种顺序遍历二叉链表。
4. 交换二叉链表的左右孩子当二叉链表的结点左孩子或者右孩子都不为空时,利用递归调用,分别交换左子树很右孩子的左右孩子,最后将根节点的左右孩子指针交换。
5. 主函数5.1 调用生成二叉链表的函数,从键盘输入二叉链表的各个结点5.2 分别调用先序遍历、中序遍历、后序遍历二叉链表函数,输出所有结点5.3 交换二叉链表的左右孩子5.4 重复5.2结论: 输入各个结点:apple、pear、orange、banana、peach、grape、watermelon 先序遍历输入与输入一致 中序遍历输出:orange、pear、banana、apple、grape、peach、watermelon 后序遍历输出:orange、banana、pear、grape、watermelon、peach、apple 交换二叉树的左右孩子后 先序遍历输出:apple、peach、watermelon、grape、pear、banana、orange编程中出现的问题:输入的二叉链表左右子树必须对称,如果不对称,交换二叉树的左右子树后,程序出错,不知道出错在哪,没有调试成功。
天津理工大学数据结构实验报告5

计算机科学与工程系计算机科学与工程系附录(可包括源程序清单或其它说明)#include<iostream>#include <stdio.h>using namespace std;typedef struct BiTNode{ //二叉链表节点存储结构int data;struct BiTNode *lchild;struct BiTNode *rchild; //左右孩子指针}BiTNode,*BiTree;void insert(BiTree &T,int k){ //二叉排序树的递归算法if(T==NULL){T=(BiTree)malloc(sizeof(BiTNode));T->data=k;T->lchild=T->rchild=NULL;}else if(k<T->data) insert(T->lchild,k);else if(k>T->data) insert(T->rchild,k);}void createBST(BiTree &T,int n){ //二叉排序树的建立T=NULL;int k;for(int i=1;i<=n;i++){cin>>k; //输入关键字insert(T,k);}}void InOrder(BiTree root){ //中序遍历二叉树排序树if(root==NULL) return;int t=root->data,k=1;InOrder(root->lchild);cout<<root->data<<" ";if(root->data<t) //判断是否为有序序列cout<<"不";InOrder(root->rchild);}void main(){BiTree T;int n;cout<<"请输入一组整数的长度n=";cin>>n;cout<<"请输入"<<n<<"个整数"<<endl;createBST(T,n);InOrder(T);cout<<"是递增有序序列!"<<endl;}运行结果:计算机科学与工程系天津理工大学计算机科学与工程系实验报告2011 至2012 学年第二学期课程名称数据结构学号学生姓名胡硕瑶年级2010专业网络工程教学班号 2 实验地点7-219 7-215实验时间2012 年 5 月日第 3 节至第 4 节主讲教师董玉涛辅导教师。
实验分析报告模板--信息安全综合实验

实验报告模板--信息安全综合实验————————————————————————————————作者:————————————————————————————————日期:2信息安全综合实验实验报告专业: 信息安全班级:信息安全2班小组成员:韩非寒(20102033)指导教师:唐召东、赵春蕾职称:讲师天津理工大学计算机与通信工程学院2014年5 月天津设计日期 2014 年 5月11 日至 2014年5月25日小组成员在本次设计中承担的任务成绩指导教师签字:年月日目录前言 (2)实验一网络通信安全 (3)▪1.1 实验概述3▪1.2 实验原理3▪1.3 实验结果以及分析16▪1.4实验小结201前言为了提高学生的动手能力,培养同学们的学习兴趣,同时对所学知识进行全面的复习,特在第7学期开设本课程。
《信息安全专业综合实践》是信息安全专业的集中性实践环节课程。
本课程的任务是训练学生综合利用所学理论知识和实践技能解决实际问题,提高学生独立钻研及团队合作能力,为适应今后的工作打下扎实的基础。
通过该课程实践,使学生能够利用密码学知识实现通信系统的机密性、完整性;能够评估系统的安全性,能够利用弱点攻破远程系统,能够有效地防御远程攻击;对Web服务、Email 服务能够熟练地管理和配置,增强系统的安全性;能够综合利用认证、授权、访问控制设计一个安全、高效的信息系统。
23实验一 网络通信安全▪ 1.1 实验概述本实验应用DES ,RSA ,MD5等加密算法,以及Socket 套接字实现一个简单的加密解密的聊天工具CryptTalk 。
本实验的程序在jdk1.6与Eclipse 开发环境下编写,基本实现了消息加密的聊天工具的功能。
通信的步骤基本如下:首先,服务器端随机产生一对RSA 密钥,将公钥发送给客户端,客户端将自己的对称密钥用公钥加密发送给服务器端,服务器端接收到加密后的密钥后,用自己的私钥解密得到对称密钥。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学院(系)名称:聋人工学院
姓名
欧芷妍
学号
20ቤተ መጻሕፍቲ ባይዱ42786
专业
产品设计
班级
14级一班
实验项目
设计思维与创意专题之二
课程名称
设计思维与创意
课程代码
实验时间
周一下午五节到八节
实验地点
28-A401
批改意见
成绩
教师签字:
产品改良设计的对象——椅子
一.实践目的:
本课程主要的是对现有的产品进行优缺点分析,并在保持原有设计优势的基础上提出改进方案,在设计优化产品过程中汲取。
三明确设计目标
为小户型的人们设计一个更简单,更美观,更实用性,方便携带,不会占地方大的椅子。
四展开设计目标(绘制早图和评价)
方案一
1)名称:蘑菇椅
2)材质:实木椅
3)情景分析
我们累了,想找地方却没地方坐,而且又不得不走路,脚比较酸。自己要是带一些方便的椅子就好了,随时坐。
4)功能以及设计说明(设计图)
二.实践工具
纸铅笔马克笔尺子笔记本电脑
三.实践过程
1上网并了解产品的对象,并且分析和研究这个产品对象的资料
2发现问题,分析问题,解决问题
3设计四个方案和设计说明
4总结和感悟
产品改良设计—椅子
一产品分析
1椅子简介
椅子是一种有靠背、有的还有扶手的坐具。古代席地而坐,原没有椅子,“椅”本是木名。《诗经》有“其桐其椅”,“椅”即梓,是一种树木的名称
4)功能以及设计说明(设计图)
方案四
1)名称:躺椅
2)材质:实木椅
4)我的想法
人们想舒服躺下,又可以随时拿自己想要的东西,比如说手机音乐机等,小柜子还可以放一些喜欢的东西,省空间,又可以表现出来自己的风格。
5)功能以及设计说明(设计图)
五产品制造
a专业的模具设计与制造
b注塑成型
c喷吐着色
d产品组装
六总结
3占空间
4、设计不科学,会造成脊椎变形
5、防摩擦效果不佳,移动造成动静太大
2)人群需求
椅子在生活中比较常见,有些事不如意,椅子太重了,而且容易成为累赘,不方便带去外面玩,有时在外面累了,没地方可以休息,也有的人想要舒适的坐,有的人想要美观一些,有的人想要特别的一下,,有的人房子椅子占空间比较大。它们是老百姓最苦恼的一部分事情。
现代的椅子分好多种类,按材质分类:实木椅、板式椅、玻璃椅、铁艺椅、塑料椅、布艺椅、皮艺椅、发泡椅等。按使用分类:办公椅、餐椅、吧椅、休闲椅、专用椅等。
按行业分类:酒店椅子、酒吧椅子、西餐厅椅子、咖啡厅椅子、办公椅子等。
按结构分类:固定木脚椅、固定四脚钢管椅、带升降五星爪轮椅、带升降五星爪固定脚等。可以说,椅子是各种各样的。
2结构与原理
举例子
(现代式太师椅)
例如上面的LCM椅子。20世纪三四十年代以后,由于合成树脂的迅速发展和高频胶核技术的应用,产生了一种新的椅子形态——胶合板椅。它改变了原有木材的特性,其结构、强度等均发生了变化,形成了一种新的造型风格。
二发现问题
1)椅子常出现的问题:
1不方便携带
2不够特别,比较常见
对于椅子的的这些产品方案,针对了小户型的人,它们表现更实用性,更方便,更简单,让他们生活舒适一些,麻烦会少一些,快乐多一份,幸福多一份。
七感悟
现代社会发展迅速,生活节奏日益加快,人们更关心情感和精神上的需求。一个想要得到用户青睐的设计,不仅需要技术强的工程师,更需要能很好体会用户需求的设计师,产品只有融入用户的情感需求才能得到用户的认可,产品设计始终是以人为核心的设计。现代设计理念是“以人为本”,椅子的设计也需要充分考虑的审美心用户的心理和情感因素,最大限度的满足用户的需求,要使人们觉得更舒适与贴心。“以人为本”的设计才是好的设计,这样的设计才有意义。而且从椅子的产品理念中我们可以感受到,它们使人们有益健康,舒适,更能提升生活品质。
方案二
1)名称:鞋椅
2)材质:皮衣椅
3)情景分析:要是桌子上没地方放书该怎么办,房间又装满了。
4)我的想法:如果真的没地方放书,那么椅子也可以放东西啊,省空间。
5)功能以及设计说明(设计图)
方案三
1)名称:叶椅
2)材质:铁艺椅
3)我的想法
我们大家都喜欢大自然,想要时尚,又可以表现环保,还可以省空间。