数据结构实验

1. 编程实现在顺序存储的有序表中插入一个元素(数据类型为整型)。

#include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct { ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList; #include "common.h" #include "seqlist.h" void px(SeqList *A,int j); void main() { SeqList *l; int p,q,r; int i; l=(SeqList*)malloc(sizeof(SeqList)); printf("请输入线性表的长度:"); scanf("%d",&r); l->last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; ilast; i++) { scanf("%d",&l->elem[i]); } px(l,i); printf("请输入要插入的值:\n"); scanf("%d",&l->elem[i]);

i++; px(l,i); l->last++; for(i=0; ilast; i++) { printf("%d ",l->elem[i]); } printf("\n"); } void px(SeqList *A,int j) { int i,temp,k; for(i=0;ielem[i]elem[k]) {temp=A->elem[i]; A->elem[i]=A->elem[k]; A->elem[k]=temp; }} } }

2. 编程实现把顺序表中从i 个元素开始的k 个元素删除(数据类型为整型)。

#include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct { ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList; #include "common.h" #include "seqlist.h" void px(SeqList *A,int j); int DelList(SeqList *L,int i,SeqList *e,int j) /*在顺序表L 中删除第i 个数据元素,并用指针参数e 返回其值。i 的合法取值为1≤i ≤L.last+1 */ { int k,a,b,c; if((iL->last+2)) { printf("删除位置不合法!");

return(ERROR); } if(j>L->last-i) { printf("删除位置不合法!"); return(ERROR); } for(b=0,a=i-1;aelem[b]=L->elem[a];} e->last=b; /* 将删除的元素存放到e 所指向的变量中*/ for(k=i;k+j-1last;k++) { L->elem[k-1]=L->elem[k+j-1]; }/*将后面的元素依次前移*/ L->last=L->last-j; printf("删除的元素值为:"); for(c=0;celem[c]);} printf("\n"); return(OK); } void main() { SeqList *l,*q; int p,r; int i,j,m; l = (SeqList*)malloc(sizeof(SeqList)); q = (SeqList*)malloc(sizeof(SeqList)); printf("请输入线性表的长度:"); scanf("%d",&r); l->last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; ilast; i++) { scanf("%d",&l->elem[i]); } px(l,i); for(i=0;ielem[i]);} printf("\n"); printf("请输入要删除的元素位置(位置+个数):\n"); scanf("%d%d",&p,&j); m=DelList(l,p,q,j); if(m==0) {printf("无法删除"); exit(0);} else if(m==1) { printf("线性表内余下元素为:\n");

for(i=0;ielem[i]);} printf("\n");} } void px(SeqList *A,int j) { int i,temp,k; for(i=0;ielem[i]elem[k]) {temp=A->elem[i]; A->elem[i]=A->elem[k]; A->elem[k]=temp; }} } printf("排序完成!"); }

2. 编程序实现将单链表的数据逆置,即将原表的数据(a1,a2….an )变成 (an,…..a2,a1) 。(单

链表的数据域数据类型为一结构体,包括学生的部分信息:学号,姓名,年龄

#include #include #include /*#define ElemType char*/ typedef struct Node /*结点类型定义*/ { int num; char name[10]; int age; struct Node * next; }Node, *LinkList; /* LinkList为结构指针类型*/ LinkList CreateFromTail() /*通过键盘输入表中元素值,利用尾插法建单链表, 并返回该单链表头指针L*/ { LinkList L; Node *r, *s; int a; char b[10]; int c; int flag =1; /*设置一个标志,初值为1,当输入"-1" 时,flag 为0,建表结束*/ L=(Node * )malloc(sizeof(Node)); L->next=NULL; /*为头结点分配存储空间,建立空的单链表L*/ r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/ /*循环输入表中元素值,将建立新结点s 插入表尾*/ printf("输入学生的信息:\n"); printf("学号 姓名 年龄\n");

while(flag) { scanf("%d",&a); if(a==-1) flag=0; else { scanf("%s%d",b,&c); s=(Node*)malloc(sizeof(Node)); s->num=a; strcpy(s->name,b); s->age=c; r->next=s; r=s; } } r->next=NULL; return L; } void ReverseList(LinkList L) { Node *p,*q; p=L->next; L->next=NULL; while(p!=NULL) { q=p->next; /*q指针保留p->next得值*/ p->next=L->next; L->next=p; /*将p 结点头插入到单链表L 中*/ p=q; /*p指向下一个要插入的结点*/ } } void main() { LinkList l; Node *p; printf("请输入链表数据, 以-1结束!\n"); l = CreateFromTail(); printf("输入的单链表为:\n"); p = l->next; while(p!=NULL) { printf("%d %s %d\n",p->num,p->name,p->age); p=p->next; } ReverseList(l); printf("逆置后的单链表为:\n"); p = l->next; while(p!=NULL) { printf("%d %s %d\n",p->num,p->name,p->age); p=p->next;

1. 编程实现在顺序存储的有序表中插入一个元素(数据类型为整型)。

#include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct { ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList; #include "common.h" #include "seqlist.h" void px(SeqList *A,int j); void main() { SeqList *l; int p,q,r; int i; l=(SeqList*)malloc(sizeof(SeqList)); printf("请输入线性表的长度:"); scanf("%d",&r); l->last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; ilast; i++) { scanf("%d",&l->elem[i]); } px(l,i); printf("请输入要插入的值:\n"); scanf("%d",&l->elem[i]);

i++; px(l,i); l->last++; for(i=0; ilast; i++) { printf("%d ",l->elem[i]); } printf("\n"); } void px(SeqList *A,int j) { int i,temp,k; for(i=0;ielem[i]elem[k]) {temp=A->elem[i]; A->elem[i]=A->elem[k]; A->elem[k]=temp; }} } }

2. 编程实现把顺序表中从i 个元素开始的k 个元素删除(数据类型为整型)。

#include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct { ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList; #include "common.h" #include "seqlist.h" void px(SeqList *A,int j); int DelList(SeqList *L,int i,SeqList *e,int j) /*在顺序表L 中删除第i 个数据元素,并用指针参数e 返回其值。i 的合法取值为1≤i ≤L.last+1 */ { int k,a,b,c; if((iL->last+2)) { printf("删除位置不合法!");

return(ERROR); } if(j>L->last-i) { printf("删除位置不合法!"); return(ERROR); } for(b=0,a=i-1;aelem[b]=L->elem[a];} e->last=b; /* 将删除的元素存放到e 所指向的变量中*/ for(k=i;k+j-1last;k++) { L->elem[k-1]=L->elem[k+j-1]; }/*将后面的元素依次前移*/ L->last=L->last-j; printf("删除的元素值为:"); for(c=0;celem[c]);} printf("\n"); return(OK); } void main() { SeqList *l,*q; int p,r; int i,j,m; l = (SeqList*)malloc(sizeof(SeqList)); q = (SeqList*)malloc(sizeof(SeqList)); printf("请输入线性表的长度:"); scanf("%d",&r); l->last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; ilast; i++) { scanf("%d",&l->elem[i]); } px(l,i); for(i=0;ielem[i]);} printf("\n"); printf("请输入要删除的元素位置(位置+个数):\n"); scanf("%d%d",&p,&j); m=DelList(l,p,q,j); if(m==0) {printf("无法删除"); exit(0);} else if(m==1) { printf("线性表内余下元素为:\n");

for(i=0;ielem[i]);} printf("\n");} } void px(SeqList *A,int j) { int i,temp,k; for(i=0;ielem[i]elem[k]) {temp=A->elem[i]; A->elem[i]=A->elem[k]; A->elem[k]=temp; }} } printf("排序完成!"); }

2. 编程序实现将单链表的数据逆置,即将原表的数据(a1,a2….an )变成 (an,…..a2,a1) 。(单

链表的数据域数据类型为一结构体,包括学生的部分信息:学号,姓名,年龄

#include #include #include /*#define ElemType char*/ typedef struct Node /*结点类型定义*/ { int num; char name[10]; int age; struct Node * next; }Node, *LinkList; /* LinkList为结构指针类型*/ LinkList CreateFromTail() /*通过键盘输入表中元素值,利用尾插法建单链表, 并返回该单链表头指针L*/ { LinkList L; Node *r, *s; int a; char b[10]; int c; int flag =1; /*设置一个标志,初值为1,当输入"-1" 时,flag 为0,建表结束*/ L=(Node * )malloc(sizeof(Node)); L->next=NULL; /*为头结点分配存储空间,建立空的单链表L*/ r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/ /*循环输入表中元素值,将建立新结点s 插入表尾*/ printf("输入学生的信息:\n"); printf("学号 姓名 年龄\n");

while(flag) { scanf("%d",&a); if(a==-1) flag=0; else { scanf("%s%d",b,&c); s=(Node*)malloc(sizeof(Node)); s->num=a; strcpy(s->name,b); s->age=c; r->next=s; r=s; } } r->next=NULL; return L; } void ReverseList(LinkList L) { Node *p,*q; p=L->next; L->next=NULL; while(p!=NULL) { q=p->next; /*q指针保留p->next得值*/ p->next=L->next; L->next=p; /*将p 结点头插入到单链表L 中*/ p=q; /*p指向下一个要插入的结点*/ } } void main() { LinkList l; Node *p; printf("请输入链表数据, 以-1结束!\n"); l = CreateFromTail(); printf("输入的单链表为:\n"); p = l->next; while(p!=NULL) { printf("%d %s %d\n",p->num,p->name,p->age); p=p->next; } ReverseList(l); printf("逆置后的单链表为:\n"); p = l->next; while(p!=NULL) { printf("%d %s %d\n",p->num,p->name,p->age); p=p->next;


相关文章

  • 天然药物化学设计性镐药剂09实验方案
  • 天然药物化学设计性实验方案 生命科学与工程学院药物制剂专业 任课教师:李楠 孔阳 天然药物化学是药学专业的一门专业基础课,它涉及到有机化学.中药药剂学.生药学.波谱学等多个学科的内容,是运用化学.生药学的原理和方法来研究天然植物药的有效化学 ...查看


  • 高校实验室数据统计信息化管理研究.doc
  • 高校实验室数据统计信息化管理研究 作者:赵亚红 来源:<教育与职业·理论版>2008年第12期 [摘要]实验室信息统计在高校实验室建设中占有举足轻重的地位,是衡量高校管理水平的重要指标之一.文章通过对"高校实验室信息统 ...查看


  • 实验设计题答案
  • 实验设计题专题资料 实验设计题的关键方法及应考对策: 1.基本思路--"一连:二测:三变: 四仿照:五计算." 2.设计实验题步骤的表达--规范.完整.注意细则 3.具体叙述要表达出: (1)自变量:如何改变,取值个数. ...查看


  • 解剖课实验
  • <运动解剖学>课程实践教学项目 <运动解剖学>课程实验项目 1 细胞和组织的显微镜观察 • 实验目的 掌握细胞的基本形态结构,掌握上皮组织.结缔组织的结构特点,掌握骨组织的结构,掌握肌肉组织的分类及骨骼肌肌原纤维的结 ...查看


  • 大学物理实验论文-完整版[1]-好[1]
  • 大学物理实验论文 标题:物理实验的感悟与体会 摘要:在本学期的实验课中,我感悟和体会很多,让我学到许多平时学习不到的大学.虽然在很多的物理实验中,我们只是在复现课堂上所学的理论知识原理与效果,但因为物理实验有着诸多不同的因素,要求我们必须端 ...查看


  • 基础医学实验教学中心形态实验教学大纲-Contents
  • 基础医学实验教学中心形态实验教学大纲 目录 Contents <组织病理学>实验教学大纲...............................2 <人体寄生虫学>实验教学大纲................. ...查看


  • 大学物理实验(二)论文总结
  • 大学物理实验数据处理及误差分析的研究 摘要:对在这一年的物理实验过程中用到的各种实验数据处理以及误差分析的方法进行总结. 关键词:数据处理,误差分析,不确定度 引言:1. 物理实验是解决有关物理问题的重要方法,解释物理实验过程中每个数据出现 ...查看


  • 数据库实验指导书
  • 数据库原理及应用 实验指导书 湖南工程学院计算机科学与通信学院 2011年9月 实验一 一. 实验目的: 掌握建立一个数据库表结构的方法和步骤 ,了解数据库表的基本组成. 二. 实验内容: 基本表的创建和修改. 三. 实验要求:(必做) 硬 ...查看


  • 数据库原理实验指导书 (1)
  • <数据库原理实验指导书> 河南科技大学电子信息工程学院 赵海霞 目录 实验规则 .......................................................................... ...查看


  • SQL实验报告总结
  • <数据库系统概论(第四版)> 体 会 学号: 姓名: 班级: 教师: 学 期实 验 总 结 与 心 得 [实验名称] 数据库的创建 [实验内容] 1.新建sql注册表. 2.新建数据库.主数据文件:逻辑文件名为student_d ...查看


热门内容