当前位置: 首页 > >

线性顺序表的插入与删除(实验报告)

发布时间:

一、实验目的和要求
通过对顺序表的编程练*,加强对顺序表的特点、顺序存储结构及其基本运 算的理解和掌握。 提前了解实验相关的 c 语言的知识。使用 C 语言根据相应算法 编写一个程序,实现建立线性顺序表、插入和删除等基本操作。要求仔细阅读下 面的内容,编写一个 C 程序,上机调试通过,并观察其结果,写出实验报告书。

二、实验内容和原理
内容:建立一个容量 10 的顺序表,在其中插入 3 个元素,然后作删除运算。 原理: 在第 i 个元素前插入元素,从第 i 个元素开始到最后一个元素均向后移动一 个位置,然后将新元素插入到第 i 个位置,将线性表的长度加 1。 删除第 i 个元素, 从第 i+1 个元素开始到最后一个元素均向前移动一个位置, 然后将线性表的长度减 1。

三、主要仪器设备
计算机一台

四、实验主程序
#include<stdio.h> #include<stdlib.h> struct List{ int size; int n; int *head; }; void init(struct List *pl,int size) { pl->size=size; pl->n=0; pl->head=malloc(size*sizeof(int)); } void in(int i,int val,struct List *pl) { int k; if(pl->n==pl->size) { printf("list is full.\n"); return; } if(i>pl->n) i=pl->n+1; if(i<1) i=1; for(k=pl->n-1;k>=i-1;--k) pl->head[k+1]=pl->head[k]; pl->head[i-1]=val; ++pl->n; } void out(int i,struct List *pl) { int k; if(pl->n==0) { printf("list is empty.\n"); return; } if(i<1||i>pl->n) { printf("this element is not in the list.\n"); return; } for(k=i;k<=pl->n;++k) pl->head[k-1]=pl->head[k]; --pl->n;

return; } void print(const struct List *pl) { int i; for(i=0;i!=pl->n;++i) printf("%d ",pl->head[i]); printf("\n"); } int main(void) { int i; struct List list; init(&list,10); for(i=0;i!=5;++i) in(i+1,i,&list); print(&list);

in(1,5,&list);print(&list); in(10,4,&list);print(&list); in(5,50,&list);print(&list); out(1,&list);print(&list); out(list.n,&list);print(&list); out(3,&list);print(&list); getchar(); return 0; }

实验结果

五、实验心得
通过实验学*, 我理解了线性顺序表的插入与删除的算法,了解到线性顺序 表的插入与删除得效率低下,感到受益匪浅。




友情链接: