算法设计学习4

实验目的及要求:

目标是使学生学会分析数据对象的特点,掌握数据组织的方法和在计算机中的存储方式,能够对具体问题中所涉及的数据选择合适的逻辑结构、存储结构,进而在此基础上,对各种具体操作设计高效的算法,培养良好的程序设计技能。

实验设备环境:

1.微型计算机

2.DEV C++(或其他的编译软件)

实验步骤:

任务一:

编程实现如下任务: 建立一个线性表,首先依次输入元素 1,2,3,...,10,然后删除元素 5,最后依次显示当前线性表中的元素。假设该线性表的元素个数在最坏情况下不会超过 100 个。要求使用顺序表。

程序参数设计\] 因为该线性表元素在最坏情况下不会超过 100 个,所以定义顺序表的 MaxSize 为 100;因为该设计任务元素的数据类型为 int 类型,所以定义顺序表的 DataType 为 int 该任务要求的插入、删除、取元素等操作可通过调用顺序表的插入、删除、取元素等函数来实现。 代码如下: ```cpp #include #define MaxSize 100 typedef int DataType; #include"SeqList.h" int main(void){ SeqList myList; int i,x; ListInitiate(&myList); for(i=0;i<10;i++) ListInsert(&myList,i,i+1); ListDelete(&myList,4,&x); printf("顺序表中的元素:"); for(i=0;isize=0; } int ListLength(SeqList L){ return L.size; } int ListInsert(SeqList *L,int i,DataType x){ int j; if(L->size>=MaxSize){ printf("顺序表已满无法插入!\n"); return 0; }else if(i<0||i>L->size){ printf("参数i不合法!\n"); return 0; }else{ for(j=L->size;j>i;j--) L->list[j]=L->list[j-1]; L->list[i]=x; L->size++; return 1; } } int ListDelete(SeqList*L,int i,DataType*x){ int j; if(L->size<=0){ printf("顺序表已空无元素可删!\n"); return 0; }else if(i<0||i>L->size-1){ printf("参数i不合法!\n"); return 0; }else{ *x=L->list[i]; for(j=i+1;j<=L->size-1;j++) L->list[j-1]=L->list[j]; L->size--; return 1; } } int ListGet(SeqList L,int i,DataType *x){ if(i<0||i>L.size-1){ printf("参数i不合法!\n"); return 0; } else{ *x=L.list[i]; return 1; } } ``` 任务二: 编程实现如下任务: 建立一个如表 2-1 所示的学生信息表,要求先依次输入元素,然后依次显示当前表中的元素。假设该表元素个数在最坏情况下不会超过100个。要求使用顺序表。 \[程序参数设计\] 因为该表元素个数在最坏情况下不会超过100个,所以定义顺序表的MaxSize为100;该设计任务要处理的元素为学生信息,从表2-1可知,每个学生信息元素包括学号、姓名、性别和年龄4个数据项。 代码如下: ```cpp #include #define MaxSize 100 typedef struct Student{ long number; char name[10]; char sex[3]; int age; }StudentType; typedef StudentType DataType; #include"SeqList.h" int main(void){ SeqList myList; int i; StudentType x[3]={{2000001,"张三","男",20}, {2000002,"李四","男",21}, {2000003,"王五","女",22}}; StudentType s; ListInitiate(&myList); ListInsert(&myList,0,x[0]); ListInsert(&myList,1,x[1]); ListInsert(&myList,2,x[2]); printf("学生信息如下:\n"); for(i=0;isize=0; } int ListLength(SeqList L){ return L.size; } int ListInsert(SeqList *L,int i,DataType x){ int j; if(L->size>=MaxSize){ printf("顺序表已满无法插入!\n"); return 0; }else if(i<0||i>L->size){ printf("参数i不合法!\n"); return 0; }else{ for(j=L->size;j>i;j--) L->list[j]=L->list[j-1]; L->list[i]=x; L->size++; return 1; } } int ListDelete(SeqList*L,int i,DataType*x){ int j; if(L->size<=0){ printf("顺序表已空无元素可删!\n"); return 0; }else if(i<0||i>L->size-1){ printf("参数i不合法!\n"); return 0; }else{ *x=L->list[i]; for(j=i+1;j<=L->size-1;j++) L->list[j-1]=L->list[j]; L->size--; return 1; } } int ListGet(SeqList L,int i,DataType *x){ if(i<0||i>L.size-1){ printf("参数i不合法!\n"); return 0; } else{ *x=L.list[i]; return 1; } } ``` 任务三: 编程实现和例 2-1 相同的务,即建立一个线性表,首先依次输入元素 1,2.3,......,10,然后删除元素 5,最后依次显示当前表中的元素。要求使用单链表。 \[程序参数设计\] 因为该设计任务中元素的数据类型为 int 类型,所以定义单链表的DataType 为 int。单链表的插入、删除、取元素等操作均可通过调用单链表的插入、删除、取元素等操作来实现。 代码如下: ```cpp #include #include typedef int DataType; #include"LinList.h" int main(void){ SLNode *head; int i,x; ListInitiate(&head); for(i=0;i<10;i++){ ListInsert(head,i,i+1); } ListDelete(head,4,&x); printf("链表中的元素:"); for(i=0;inext=NULL; } int ListLength(SLNode *head){ SLNode *p=head; int size=0; while(p->next!=NULL){ p=p->next; size++; } return size; } int ListInsert(SLNode *head,int i,DataType x){ SLNode *p,*q; int j; p=head; j=-1; while(p->next!=NULL&&jnext; j++; } if(j!=i-1){ printf("插入元素位置参数错!"); return 0; } q=(SLNode *)malloc(sizeof(SLNode)); q->data=x; q->next=p->next; p->next=q; return 1; } int ListDelete(SLNode *head,int i,DataType *x){ SLNode *p,*s; int j; p=head; j=-1; while(p->next!=NULL&&p->next->next!=NULL&&jnext; j++; } if(j!=i-1){ printf("删除元素位置参数错!"); return 0; } s=p->next; *x=s->data; p->next=p->next->next; free(s); return 1; } int ListGet(SLNode *head,int i,DataType *x){ SLNode *p; int j; p=head; j=-1; while(p->next!=NULL&&jnext; j++; } if(j!=i){ printf("取出元素位置参数错!"); return 0; } *x=p->data; return 1; } void Destroy(SLNode **head){ SLNode *p,*p1; p=*head; while(p!=NULL){ p1=p; p=p->next; free(p1); } *head=NULL; } ```

相关推荐
愈努力俞幸运2 分钟前
c++ 头文件
开发语言·c++
永日456709 分钟前
学习日记-day24-6.8
开发语言·学习·php
安和昂11 分钟前
【iOS】 Block再学习
学习·ios·cocoa
pop_xiaoli13 分钟前
OC学习—命名规范
学习·ios
jackson凌14 分钟前
【Java学习笔记】String类(重点)
java·笔记·学习
~山有木兮14 分钟前
C++设计模式 - 单例模式
c++·单例模式·设计模式
行云流水剑22 分钟前
【学习记录】在 Ubuntu 中将新硬盘挂载到 /home 目录的完整指南
服务器·学习·ubuntu
vijaycc26 分钟前
python学习打卡day47
学习
十五年专注C++开发26 分钟前
CMake基础:gcc/g++编译选项详解
开发语言·c++·gcc·g++
Camellia03111 小时前
嵌入式学习--江协stm32day5
stm32·嵌入式硬件·学习