天津理工大学 c语言上机报告8.doc_第1页
天津理工大学 c语言上机报告8.doc_第2页
天津理工大学 c语言上机报告8.doc_第3页
天津理工大学 c语言上机报告8.doc_第4页
天津理工大学 c语言上机报告8.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机与通信工程学院天津理工大学计算机与通信工程学院实验报告(试做)2009 至 2010 学年 第 一 学期课程名称高级程序设计语言 I学号学生姓名年级专业教学班号实验地点实验时间 20 年 月 日 第 节 至 第 节主讲教师孙世温辅导教师实验(八)实验名称结构体和联合软件环境Win XP、Visual C+ 6.0硬件环境PC实验目的(1) 掌握结构体类型的定义和使用;(2) 掌握结构体类型变量的概念和使用;(3) 掌握链表的概念,初步学会对链表进行操作;(4) 掌握共用体的概念和使用;(5) 进一步熟悉Visual C+6.0开发环境下调试程序的基本步骤。实验内容(应包括实验题目、实验要求、实验任务等)(1) 利用顺序表实现“先进后出”的堆栈l 结构体定义:/ 结构体 Stackstruct Stackint * List; / 用来存储元素的顺序表int curNumber; / 用来存储当前元素的总个数;l 函数原型:void iniStack(Stack * A); / 初始化堆栈void clearStack(Stack * A); /清空堆栈void push(Stack * A, ELEMENT obj);/将元素obj压入堆栈的栈顶void pop(Stack * A);/将当前栈顶的元素弹出栈。要求:栈不为空ELEMENT get_top(Stack * A); /返回当前栈顶的元素值。要求:栈不为空int is_empty(Stack * A); /判断当前堆栈是否为空,空返回1,非空返回0void display(Stack * A); /自顶向下显示堆栈中的元素(2) 已知学生基本信息由学号(长整型)、姓名(字符数组)、性别(字符型)、年龄(整型)组成。定义如下结构类型:l 结构体定义:/ 定义结构体:存储学生基本信息struct STUDENT_NODE long int id;char nameMAX_LEN;char sex;int age; / 指针指向下一个结点,用以形成链表STUDENT_NODE *next;/定义结构体:存储单向链表struct STUDENT_LINKSTUDENT_NODE *top;l 函数原型:void iniStudentLink(STUDENT_LINK * L); / 初始化学生链表void clearStudentLink(STUDENT_LINK * L); /清空学生链表int isExist(STUDENT_LINK * L, long int id); / 判断该学号的学生信息是否存在int Add(STUDENT_LINK * L,long int id,char name,char sex, int age); /添加一个新同学的信息 int Modify(STUDENT_LINK * L, long int id,char name,char sex, int age); / 根据学号,修改该同学的信息int Delete(STUDENT_LINK * L, long int id); / 根据学号,从链表中删除该同学的信息int Search(STUDENT_LINK * L,long int id); / 根据学号,输出显示该同学信息void ShowALL(STUDENT_LINK * L); / 从头到尾,输出当前所有的同学信息实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)(1) 顺序表实现堆栈l 运行结果(2) 学生信息链表附录(可包括源程序清单或其它说明)(1) 顺序堆栈l 源代码:#include#include #include#define MAX_LEN 100/ 堆栈元素类型/ 这里采用 typedef 别名机制,便于修改为别的类型, 如: typedef double ELEMENT;typedef int ELEMENT;/ 结构体 Stackstruct StackELEMENT * List; / 用来存储元素的顺序表int curNumber; / 用来存储当前元素的总个数;void iniStack(struct Stack * A); / 初始化堆栈void clearStack(struct Stack * A); /清空堆栈void push(struct Stack * A, ELEMENT obj);/将元素obj压入堆栈的栈顶void pop(struct Stack * A);/将当前栈顶的元素弹出栈。要求:栈不为空ELEMENT get_top(struct Stack * A); /返回当前栈顶的元素值。要求:栈不为空int is_empty(struct Stack * A); /判断当前堆栈是否为空,空返回1,非空返回0void display(struct Stack * A); /自顶向下显示堆栈中的元素void main()const int max_input=5; /用户输入的次数 int loop;ELEMENT user_input;struct Stack * S=(struct Stack*)malloc(sizeof(struct Stack); /申请一个堆栈对象/ 初始化iniStack(S);for(loop=1;loop=max_input;loop+)printf(Input no. %d :,loop);scanf(%d,&user_input);push(S, user_input);display(S);for(loop=1;loopList=(ELEMENT *)malloc(sizeof(ELEMENT)*MAX_LEN);A-curNumber=0;/*清空堆栈*/void clearStack(struct Stack * A)if(A!=NULL)free(A-List);A-curNumber=0;/* 将元素obj压入以 top 为栈顶的堆栈的栈顶*/void push(struct Stack * A, ELEMENT obj)if(A-curNumberMAX_LEN)printf( n 堆栈中的元素总数超过最大容量 ! n);return;A-ListA-curNumber=obj;A-curNumber+;/*将当前栈顶的元素弹出栈。要求:栈不为空*/void pop(struct Stack * A)if(!is_empty(A)A-curNumber-;/*返回当前栈顶的元素值。要求:栈不为空*/ELEMENT get_top(struct Stack * A)if(is_empty(A)printf(Error: Get top from empty stack. n);exit(1);/终止程序return A-ListA-curNumber-1;/*判断当前堆栈是否为空,空返回1,非空返回0*/int is_empty(struct Stack * A)return (A-curNumber=0);/*自顶向下显示堆栈中的元素*/void display(struct Stack * A)int i;printf( Stack 中的元素 自顶向下 为: n);for(i=A-curNumber-1;i=0;i-)printf(%d n,A-Listi); (2) 学生信息链表l 源代码:void main()STUDENT_LINK* tjut;tjut=new STUDENT_LINK;iniStudentLink(tjut);Add(tjut,2007002,Tom,M,19);Add(tjut,2007007,Jack,M,20);Add(tjut,2007004,Mary,F,20);ShowALL(tjut);Modify(tjut,2007002,Tom Smith,M,19);Search(tjut,2007002);Delete(tjut,2007004);ShowALL(tjut);clearStudentLink(tjut);delete tjut;/*初始化学生链表*/void iniStudentLink(STUDENT_LINK * L)L-top=new STUDENT_NODE; /top结点是个内容为空的结点,注意其作用L-top-id=0;L-top-next=NULL;/*清空学生链表*/void clearStudentLink(STUDENT_LINK * L)STUDENT_NODE *ptr;while(L-top != NULL) ptr=L-top;L-top=L-top-next;delete ptr;return;/* 判断该学号的学生信息是否存在: 存在返回1,不存在返回0*/int isExist(STUDENT_LINK * L,long int id)int exist;STUDENT_NODE *ptr;exist=0;ptr=L-top;while(ptr!=NULL)if(id=ptr-id) /此学生信息已存在exist=1;break;ptr=ptr-next;return exist;/* 添加一个新同学的信息*/int Add(STUDENT_LINK * L, long int id,char name,char sex, int age)int error;int exist;STUDENT_NODE *ptr;STUDENT_NODE *node;error=0;exist=isExist(L,id);if(exist=1)error=1;coutError! 错误添加:id = id 此学生信息已存在!top;while(ptr-next!=NULL)&(ptr-next-idnext;node=new STUDENT_NODE;node-id=id;strcpy(node-name,name);node-sex=sex;node-age=age; /新结点插入到ptr结点之后node-next=ptr-next;ptr-next=node;cout添加:id = id 学生信息成功 !endl;return error;/ 根据学号,修改该同学的信息int Modify(STUDENT_LINK * L,long int id,char name,char sex, int age)int error;int exist;STUDENT_NODE *ptr;error=0;exist=isExist(L,id);if(exist=0)error=1;coutError! 错误修改:id = id 此学生信息不存在!top;while(ptr!=NULL)&(ptr-id!=id)ptr=ptr-next;/ 修改ptr中的信息strcpy(ptr-name,name);ptr-sex=sex;ptr-age=age; cout修改:id = id 学生信息成功 !endl;return error;/ 根据学号,从链表中删除该同学的信息int Delete(STUDENT_LINK * L,long int id)int error;int exist;STUDENT_NODE *ptr;STUDENT_NODE *node;error=0;exist=isExist(L,id);if(exist=0)error=1;coutError! 错误删除:id = id 此学生信息不存在!top;while(ptr-next!=NULL)&(ptr-next-id!=id)ptr=ptr-next;/结点ptr-next就是要删除的结点node=ptr-next;ptr-next=ptr-next-next;delete node;cout删除:id = id 学生信息成功 !endl;return error; / 根据学号,输出显示该同学信息int Search(STUDENT_LINK * L,long int id)int error;int exist;STUDENT_NODE *ptr;error=0;exist=isExist(L,id);if(exist=0)error=1;coutError! 错误显示:id = id 此学生信息不存在!top;while(ptr!=NULL)&(ptr-id!=id)ptr=ptr-next;/ 结点ptr中就是要找的结点的信息cout显示:id = id 学生信息:endl;coutid : idendl;coutname : nameendl;coutsex : sexendl;coutage : ageendl; cout显示:id = id 学生信息成功 !endl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论