欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    东北大学秦皇岛分校数据结构实验报告.doc

    • 资源ID:51825403       资源大小:1.03MB        全文页数:61页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    东北大学秦皇岛分校数据结构实验报告.doc

    数据结构实验报告(数据结构)班级学号学生姓名提交日期2014年12月9日成 绩 :计算机与通信工程学院2013实验一 线性表的应用【实验目的】:1、掌握线性表的逻辑结构定义2、掌握线性表的两种存储结构(顺序和链式)3、掌握顺序表和链表的定义及基本操作【实验内容】通过编程完成具有一定实际意义的课题,加深对线性表应用的理解和掌握。参考题目如下所示。学生可在完成以下题目之后经指导教师同意自行设计其它选题并将选题源程序与执行结果提交指导教师审阅。1、实验题目:字母链表n 功能要求:生成26个字母的线性表,并实现对特定字母的插入和删除。n 程序说明:使用顺序表或者链表生成字母有序表,并应用相应数据结构实现对单个字母的插入和删除操作。其中,结构体或类的使用,可参考教材、辅导教材或其它应用实例。源程序如下:#include<stdio.h>#include<malloc.h>typedef struct listchar data;struct list*link;test;test *p,*q,*r,*head,*d;int L;int m=sizeof(test);void build();void display();int insert_char(char,char);int delet_char(char);void build()int i;head=(test*)malloc(m);p=head;for(i=1;i<L;i+)p->data=i+'a'-1;p->link=(test*)malloc(m);p=p->link;p->data=i+'a'-1;p->link=NULL;void display(int l)d=head;while(d->link!=NULL)printf("%c->",d->data);d=d->link;printf("%cn",d->data);printf("the list length is:%dn",l);int insert_char(char X,char Y)p=head;r=(test*)malloc(m);r->data=X;if (Y<'a') Y=Y+32;if(head->data=Y)head=r;r->link=p;elsewhile(p->data!=Y)&&(p->link!=NULL) q=p;p=p->link;if(p->data=Y)q->link=r;r->link=p;elsep->link=r,r->link=NULL;L+;return L;int delet_char(char X)p=head;if (X<'a') X=X+32;if(head->data=X)head=head->link;free(p);elsewhile(p->data!=X)&&(p->link!=NULL)q=p;p=p->link;if(p->data=X)q->link=p->link;free(p);else return(-1);L-;return L;int main(void)int m,x,y,z,l;L=26;build();display(L);printf("n请选择:1.插入字母 2.删除字母n");m=getchar();fflush(stdin);/清除键盘缓冲区switch(m)case '1':printf("you will insert the char X before char Y:n");scanf("%c,%c",&x,&y);display(insert_char(x,y);break;case '2':printf("you will Delete the char X:n");scanf("%c",&z);l=delet_char(z);display(l);break;default:printf("ERROR,please input your choice of: 1 or 2n");break;2、实验题目:链表的创建n 功能要求:使用简单数据类型,利用指针创建一个基本链表。n 程序说明:使用指针,通过在头结点之后插入新节点的操作,逐步生成基本链表。其中,结构体或类的使用,可参考教材、辅导教材或其它应用实例。源程序如下:#include "stdlib.h"#include "stdio.h"#include<malloc.h>struct listint data;struct list*next;typedef struct list node;typedef node *link;int main()link ptr,head;int num,i;head=(link)malloc(sizeof(node);ptr=head;printf("please input 5 numbers=>n");for(i=0;i<=4;i+)scanf("%d",&num);ptr->data=num;ptr->next=(link)malloc(sizeof(node);if(i=4)ptr->next=NULL;else ptr=ptr->next;ptr=head;while(ptr!=NULL)printf("The value is =>%dn",ptr->data);ptr=ptr->next;3、 实验题目:链表的逆序输出n 功能要求:使用简单数据类型,利用指针创建一个基本链表。n 程序说明:使用指针,通过在尾结点之前插入新节点的操作,逐步逆序生成基本链表,之后,利用头结点实现顺序输出,以达到链表逆序的功能。其中,结构体或类的使用,可参考教材、辅导教材或其它应用实例。#include <stdlib.h>#include <stdio.h>struct list int data; struct list*next;typedef struct list node ;typedef node *link;int main()link ptr,head,tail; int N,num,i,L=0; tail=(link)malloc(sizeof(node); tail->next=NULL; ptr=tail; printf("nplease input the num of the data=>n"); scanf("%d",&N); printf("nplease input %d data=>n",N); for(i=0;i<N;i+) scanf("%d",&num); ptr->data=num; head=(link)malloc(sizeof(node); head->next=ptr; ptr=head; ptr=ptr->next; /*从尾结点向前插入生成链表*/while(ptr!=NULL)printf("The value is=>%dn",ptr->data); /*结点输出*/ ptr=ptr->next;L+;/*计算链表结点个数*/printf("The langth of the link is=>%dn",L);4、 连接两个链表n 功能要求:使用简单数据类型,利用指针创建一个基本链表。n 程序说明:使用指针,首先使用程序一生成两个基本链表,之后使用两个链表的头尾指针相连,从而实现两个链表的连接。其中,结构体或类的使用,可参考教材、辅导教材或其它应用实例。源程序如下:#include <stdlib.h>#include <stdio.h>struct listint data;struct list*next;typedef struct list node;typedef node *link;link create_list(int array,int num)link tmp1,tmp2,pointer;int i;pointer=(link)malloc(sizeof(node);pointer->data=array0;tmp1=pointer;for(i=0;i<num;i+)tmp2=(link)malloc(sizeof(node);tmp2->next=NULL;tmp2->data=arrayi;tmp1->next=tmp2;tmp1=tmp1->next;return pointer;int display(link ptr)while(ptr!=NULL)printf("%d->",ptr->data);ptr=ptr->next;printf("n");link concatenate(link pointer1,link pointer2)link tmp;tmp=pointer1;while(tmp->next)tmp=tmp->next;tmp->next=pointer2;return pointer1;void main(void)int arr1=3,12,8,9,11; int arr2=55,39,17,21,76; link ptr,ptr1,ptr2,ptr3;ptr1=create_list(arr1,5);display(ptr1);ptr2=create_list(arr2,5);display(ptr2);ptr3=concatenate(ptr1,ptr2);display(ptr3);实验二 栈与队列的应用【实验目的】:1、 掌握栈和队列的结构定义和特性2、 掌握栈和队列的基本操作以及栈和队列在程序设计中的应用。【实验内容】通过编程完成具有一定实际意义的课题,加深对栈与队列应用的理解和掌握。参考题目如下所示。学生可在完成以下题目之后经指导教师同意自行设计其它选题并将选题源程序与执行结果提交指导教师审阅。1、实验题目:利用栈实现数制转换n 功能要求:使用栈完成十进制数到各种不同进制数的数制转换。n 程序说明:利用堆栈工作原理实现对任意十进制数的数值转换操作。其中,实现堆栈功能的各个库函数由自行建立的头文件“stack.h”提供,“stack.h”可参考授课教材相关章节,结构体或类的使用,可参考教材、辅导教材或其它应用实例。#define OVERFLOW -1#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10/定义栈中的常量typedef int Status;/指定栈操作的返回值类型typedef int SElemType;/定义栈元素的数据类型struct STACKSElemType *base;SElemType *top;int stacksize;typedef struct STACK SqStack;typedef struct STACK *pSqStack;/栈结构的定义Status InitStack(SqStack &S);Status StackEmpty(SqStack S);Status Push(SqStack &S,SElemType e);Status Pop(SqStack &S,SElemType &e);/栈的基本操作函数声明#include <stdlib.h>#include <stdio.h>int e;SqStack S;/全局变量定义void conversion(int n,int f); /数制转换函数声明;int main()int N,F;printf("请输入待转换数制:n");scanf("%d",&F);printf("Input a number to convert to %d:n",F);scanf("%d",&N);conversion(N,F);getchar();printf("nn");return 0;/主程序Status StackEmpty(SqStack S)if(S.top=S.base)return TRUE;elsereturn FALSE;/StackEmpty();Status InitStack(SqStack &S)/*S=(pSqStack)malloc(sizeof(SqStack);S.base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType);if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;/initStack();Status Push(SqStack &S,SElemType e)if(S.top - S.base>=S.stacksize) if(!S.base)exit(OVERFLOW);S.base=(SElemType *)realloc(S.base,(S.stacksize + STACKINCREMENT)*sizeof(SElemType);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*(S.top+)=e;return OK;/ Push();Status Pop(SqStack &S,SElemType &e)if(S.top=S.base)return ERROR;/*e=*(-(S.top);-S.top;e=*S.top;return OK;/Pop();void conversion(int n,int f)InitStack(S);if (n<0)printf("nThe number must be over 0->");return;if(!n) Push(S,0);while(n)Push(S,n%f);n=n/f;printf("the result is: ");while(!StackEmpty(S)Pop(S,e);printf("%d",e);2、实验题目:简单四则运算程序n 功能要求:使用堆栈数据结构,完成10以内的四则运算。n 程序说明:按照操作符的优先级,使用堆栈数据结构,由左至右读入字符并判定计算步骤完成操作,并生成结果输出。其中,实现堆栈功能的各个库函数由自行建立的头文件“stack.h”提供,“stack.h”可参考授课教材相关章节,结构体或类的使用,可参考教材、辅导教材或其它应用实例。#include<stdio.h>#include<malloc.h>#include<string.h>#include "stack.h"#define OVERFLOW -1#define OK 1#define ERROR 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef char SElemType;typedef int Status;struct STACKSElemType *base;SElemType *top;int stacksize;typedef struct STACK SqStack;typedef struct STACK *pSqStack;/*堆栈的基本数据定义*/Status InitStack(SqStack *S);Status DestroyStack(SqStack *S);SElemType GetTop(SqStack S);Status Push(SqStack *S,SElemType *e);Status Pop(SqStack *S,SElemType *e);Status StackTraverse(SqStack S,Status(*visit)(SElemType *e);/*堆栈基本操作的函数声明*/Status InitStack(SqStack *S)(*S)=(SqStack*)malloc(sizeof(SqStack);(*S)->base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType);if(!(*S)->base)exit(OVERFLOW);(*S)->top=(*S)->base;(*S)->stacksize=STACK_INIT_SIZE;return OK;/*堆栈的初始化*/Status DestroyStack(SqStack *S)free(S->base);free(S);return OK;/*堆栈的销毁操作*/SElemType GetTop(SqStack S)if(S.top=S.base) return ERROR;return *(S.top-1);/*取得栈顶元素*/Status Push(SqStack *S,SElemType e)if(S->top - S->base>=S->stacksize)S->base=(SElemType *)realloc(S->base,(S->stacksize + STACKINCREMENT)*sizeof(SElemType);if(!S->base)exit(OVERFLOW);S->top=S->base+S->stacksize;S->stacksize+=STACKINCREMENT;*(S->top+)=e;return OK;/*将数据压栈*/Status Pop(SqStack *S,SElemType *e)if(S->top=S->base)return ERROR;*e=*(-(S->top);return OK;/*数据从堆栈弹出*/Status StackTraverse(SqStack S,Status (*visit)(SElemType *e)while (S.top>S.base)visit(-S.top);return OK;/*堆栈的遍历*/char OP10='+','-','*','/','(',')','#'int precede77=1,1,2,2,2,1,1,1,1,2,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,3,0,1,1,1,1,0,1,1,2,2,2,2,2,0,3;/*对数据操作符数组OP及优先权矩阵的定义*/int In(char c,char *op)int i=0;while(i<7)if(c=opi+)return 1;return 0;/*判断输入字符是否为操作符,否则将其认为是数字*/char Precede(char op,char c)int pos_op;int pos_c;int i;for (i=0;i<7;i+)if(op=OPi) pos_op=i;if(c=OPi) pos_c=i;switch(precedepos_oppos_c)case 1: return '>'case 2: return '<'case 3: return '='return OK;/*对判定为操作符的字符根据优先权矩阵判断其优先顺序*/char Operate(int a,char theta,int b)switch(theta)case '+': return a+b-'0'case '-': return a-b+'0'case '*': return (a-'0')*(b-'0')+'0'case '/': return (a-'0')/(b-'0')+'0'return OK;/*对表达式进行计算,返回计算结果*/char EvaluateExpression()SqStack *OPND,*OPTR;char c,x,theta;char a,b;InitStack(&OPTR); Push(OPTR,'#');InitStack(&OPND);c=getchar();while(c!='#'|GetTop(*OPTR)!='#')if(!In(c,OP)Push(OPND,c);c=getchar();/*使用OPND栈存放数字*/elseswitch (Precede(GetTop(*OPTR),c)case '<':Push(OPTR,c); /*使用OPTR栈存放操作符*/c=getchar();break;case '=':Pop(OPTR,&x);c=getchar();break;case '>':Pop(OPTR,&theta);Pop(OPND,&b);Pop(OPND,&a);Push(OPND,Operate(a,theta,b);break;/*使用栈操作进行表达式的计算*/c=GetTop(*OPND); /*取得 OPND栈顶元素为最终结果*/DestroyStack(OPTR);DestroyStack(OPND);return c;int main()char i;printf("nnn表达式只能连续输入0.9单个数字及+-*/四个运算符,以#结束:n");i=EvaluateExpression();printf("nThis expression's result is: ");printf("%dnnnn",i-'0');3、 实验题目:表达式括号匹配程序n 功能要求:使用堆栈,对整行输入的表达式进行括号匹配操作,并判定匹配与否将结果输出。n 程序说明:使用堆栈与字符比较,判定表达式括号是否匹配。其中,实现堆栈功能的各个库函数由自行建立的头文件“stack.h”提供,“stack.h”可参考授课教材相关章节,结构体或类的使用,可参考教材、辅导教材或其它应用实例。#include<stdio.h>#include<malloc.h>#include "stack.h"#define OVERFLOW -1#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int SElemType;typedef int Status;struct STACKSElemType *base;SElemType *top;int stacksize;typedef struct STACK SqStack;typedef struct STACK *pSqStack;/*堆栈的基本数据定义*/Status InitStack(SqStack *S);Status StackEmpty(SqStack S);Status Push(SqStack *S,SElemType *e);Status Pop(SqStack *S,SElemType *e);/*堆栈基本操作的函数声明*/Status InitStack(SqStack *S)(*S)=(SqStack*)malloc(sizeof(SqStack);(*S)->base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType);if(!(*S)->base)exit(OVERFLOW);(*S)->top=(*S)->base;(*S)->stacksize=STACK_INIT_SIZE;return OK;/*堆栈的初始化*/Status StackEmpty(SqStack S)if(S.top=S.base)return TRUE;elsereturn FALSE;/*判断堆栈是否为空栈*/Status Push(SqStack *S,SElemType e)if(S->top - S->base>=S->stacksize)S->base=(SElemType *)realloc(S->base,(S->stacksize + STACKINCREMENT)*sizeof(SElemType);if(!S->base)exit(OVERFLOW);S->top=S->base+S->stacksize;S->stacksize+=STACKINCREMENT;*(S->top+)=e;return OK;/*将数据压栈*/Status Pop(SqStack *S,SElemType *e)if(S->top=S->base)return ERROR;*e=*(-(S->top);return OK;/*数据从堆栈弹出*/Status AllBrackets_Test(SqStack *S,char *str)InitStack(&S); char *p;int c;for(p=str;*p!='#'p+)if(*p='('|*p=''|*p='')Push(S,*p);else if(*p=')'|*p=''|*p='')if(StackEmpty(*S) return ERROR;Pop(S,&c);if(*p=')'&&c!='(')return ERROR;if(*p=''&&c!='')return ERROR;if(*p=''&&c!='')return ERROR;/end forif(!StackEmpty(*S)return ERROR;int main()SqStack S;char str50,c; char *s=str;int i=0;printf("请输入算术表达式,以'#'为结束:n");while(c!='#')scanf("%c",&c);stri=c;i+;int tag=AllBrackets_Test(&S,s);if(tag)printf("nRight!n");elseprintf("nWrong!n");4、 堆栈与队列的遍历操作(可选)n 功能要求:使用简单数据类型,利用指针分别创建一个基本栈和一个基本队列,并使用指针将堆栈与队列元素按顺序输出。n 程序说明:使用指针,首先两个基本数据结构,之后分别使用两个不同数据结构的指针实现对各自元素的输出。其中,实现堆栈功能的各个库函数由自行建立的头文件“stack.h”提供,“stack.h”可参考授课教材相关章节,结构体或类的使用,可参考教材、辅导教材或其它应用实例。#include<stdio.h>#include"stack.h"#include"queue.h"#define OVERFLOW -1#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef char SElemType;typedef char QElemType;typedef int Status;struct STACKSElemType *base;SElemType *top;int stacksize;typedef struct STACK SqStack;typedef struct STACK *pSqStack;typedef int Status;typedef struct QNodeQElemTypedata;struct QNode *next;QNode,*QueuePtr;typedef structQueuePtr front;QueuePtr rear;LinkQueue;/*堆栈的基本数据定义*/Status InitStack(SqStack *S);Status InitQueue(LinkQueue &Q);Status Push(SqStack *S,SElemType *e);Status EnQueue(LinkQueue &Q,QElemType e);Status QueueTraverse(LinkQueue Q,Status(*visit)();Status StackTraverse(SqStack S,Status(*visit)(SElemType *e);/*堆栈基本操作的函数声明*/Status InitStack(SqStack *S)(*S)=(SqStack*)malloc(sizeof(SqStack);(*S)->base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType);if(!(*S)->base)exit(OVERFLOW);(*S)->top=(*S)->base;(*S)->stacksize=STACK_INIT_SIZE;return OK;/*堆栈的初始化*/Status Push(SqStack *S,SElemType e)if(S->top - S->base>=S->stacksize)S->base=(SEl

    注意事项

    本文(东北大学秦皇岛分校数据结构实验报告.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开