算法设计学习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; } ```

相关推荐
贺函不是涵6 分钟前
【沉浸式求职学习day41】【Servlet】
java·学习·servlet·maven
愚润求学35 分钟前
【Linux】进程间通信(一):认识管道
linux·运维·服务器·开发语言·c++·笔记
霸王蟹43 分钟前
React中useState中更新是同步的还是异步的?
前端·javascript·笔记·学习·react.js·前端框架
霸王蟹1 小时前
React Hooks 必须在组件最顶层调用的原因解析
前端·javascript·笔记·学习·react.js
珊瑚里的鱼1 小时前
【滑动窗口】LeetCode 1658题解 | 将 x 减到 0 的最小操作数
开发语言·c++·笔记·算法·leetcode·stl
共享家95271 小时前
哈希的原理、实现
c++·算法
*才华有限公司*2 小时前
gRPC开发指南:Visual Studio 2022 + Vcpkg + Windows全流程配置
c++·ide·visual studio
wefg13 小时前
【C++】类与对象
开发语言·c++
请你喝好果汁6413 小时前
Jupyter Notebook 配置学习笔记
笔记·学习·jupyter
冬日枝丫3 小时前
【spring】spring学习系列之六:spring的启动流程(下)
java·学习·spring