有序表的建立、插入与删除
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一、有序表的建立、插入与删除
一、实验目的
1、了解有序表的顺序存贮结构。
2、掌握有序表元素在内存中是怎样存贮的。
3、在有序表中实现如下操作:
(1)插入一个新元素到第i个位置。使原来标号为增1。
(2)删除第i个位置的元素。
(3)存一个新元素到第i个位置。
(4)读表
(5)检索表中第i个元素。
(6)寻表的长度
二、实验原理
(一)线性表是最常用的而且也是最简单的一种数据结构,线性表是N个数据元素的有限序列。例如26个英文元素的字母表:(A,B,C,D,···)。其数据结构的描述为:
Linear_list=(D,R)其中:D={a i|a i属于D0,i=1,2,3,···}R={N},N={|i=2,3,4,···}。本实验是以数组的形式把有序表存放在计算机内存的一个连续的区域内,这样便有:
LOC(a i+1)=LOC(a i)+m。其中m是存放每个元素所占的内存字数。LOC(a i)=LO+m·(i-1)。
其中LO是a i的地址,即首地址。
(二)实验程序说明
插入一个新元素到第i个位置,既把元素a i向后移一个位置,成为元素a i+1,把新元素放入到第i个位置,其他元素依次后移。
存一新元素到第i个位置是把元素a i冲掉后存上新值。
删除第i个元素就是把余后的元素依次向前移一个位置。即:以元素a i+1,a i+2,···,
依次取代a i,a i+1,···。删除后的表长是n-1(n是原表长)。
三、程序流程图
四、参考程序
/* 有序表的建立、插入与删除 */
static int array[100];
int j,i,n,p;
int ch;
void du()
{
printf("please tell me which numbers do you operate:");
scanf("%d",&i);
while (i>n)
{
printf("ERROR,please enter new element");
scanf("%d",&i);
}
}
void da()
{
printf("the list is:");
for(j=0;j printf("%3d",array[j]); printf("\n"); } void show() { printf("-----------------------------------\n"); printf(" the function of the list\n"); printf(" 1: insert\n"); printf(" 2: delete\n"); printf(" 3: save new element\n"); printf(" 4: read list\n"); printf(" 5: check\n"); printf(" 6: the length of the list\n"); printf(" 0: end\n"); printf("-----------------------------------\n"); } main() { printf("please input the length of list:"); scanf("%d",&n); printf("\n"); printf("please enter number:"); for (i=0;i scanf("%d",&array[i]); p=1; while (p!=0) { show(); printf ("enter p: "); scanf("%d",&p); if(p>=0&&p<=6) {switch(p) { case 1: printf("the inserted number places the front of the operation\n"); du(); for (j=n-1;j>=i-1;j--) array[j+1]=array[j]; printf("please enter number:\n"); scanf("%d",&ch); array[i-1]=ch; n+=1; da(); break; case 2: du(); for(j=i-1;j<=n;j++) array[j]=array[j+1]; n-=1; da(); break; case 3: du(); printf("please enter new number:\n"); scanf("%d",&ch); printf("\n"); array[i-1]=ch; da(); break; case 4: da(); break; case 5: du(); printf("what is the %d number:",i); printf("%3d\n",array[i-1]); break;