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

相关推荐
Merokes6 小时前
关于Gstreamer+MPP硬件加速推流问题:视频输入video0被占用
c++·音视频·rk3588
zhuyixiangyyds7 小时前
day21和day22学习Pandas库
笔记·学习·pandas
每次的天空7 小时前
Android学习总结之算法篇四(字符串)
android·学习·算法
请来次降维打击!!!7 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
别NULL7 小时前
机试题——统计最少媒体包发送源个数
c++·算法·媒体
嘤国大力士8 小时前
C++11&QT复习 (七)
java·c++·qt
背影疾风8 小时前
C++学习之路:指针基础
c++·学习
x-cmd8 小时前
[250331] Paozhu 发布 1.9.0:C++ Web 框架,比肩脚本语言 | DeaDBeeF 播放器发布 1.10.0
android·linux·开发语言·c++·web·音乐播放器·脚本语言
myloveasuka8 小时前
[Linux]从硬件到软件理解操作系统
linux·开发语言·c++
UpUpUp……8 小时前
特殊类的设计/单例模式
开发语言·c++·笔记·单例模式