线性表的基本操作实现及其应用

一、实验目的

 1、    熟练掌握线性表的结构特点,掌握顺序表的基本操作。

 2、    巩固C++相关的程序设计方法与技术。

 3、    学会使用顺序表解决实际问题。

二、实验内容

 1、顺序表的建立与操作实现

建立n个元素的顺序表(n的大小和表里数据自己确定),实现相关的操作:输出,插入,删除,查找等功能。编写完整程序实现,程序语言不限定,使用技术形式不定。

三、实验步骤

 1、依据实验内容分别说明实验程序中用到的数据类型的定义;

      数据类型均为整型。

 2、相关操作的算法表达;

    1、    顺序表的建立

void CreateList(SeqList *L,int n)

 {            int i;

 printf("please input n numbers:\n");

 for(i=1;i<=n;i++)

  scanf("%d",&L->elem[i]);

 L->length=n;

 }

   2、    顺序表的打印

void PrintList(SeqList *L,int n)

 {int i;

 printf("the sqlist is\n");

 for(i=1;i<=n;i++)

 printf("%d ",L->elem[i]);

 printf("\n");

 }

   3、    顺序表的查找

int LocateList(SeqList *L,int  x)

 {int i;

 i=1;

 while (((L->elem[i])!=x)&&(i<=10))

 ++i;

 if ((L->elem[i])==x) return(i);

 else return(0);

}

   4、    顺序表的插入

void InsertList(SeqList *L,int  x,int i)

 {int j;

 if (i<1 ||i>L->length+1)

 printf("no insert position!\n");

 else

 {for(j=L->length;j>=i;j--)

  L->elem[j+1]=L->elem[j];

 L->elem[i]=x;

 L->length++;

 }

}

   5、     顺序表的删除

void DeleteList(SeqList *L,int i)

 {int j;

 if (i<1 ||i>L->length)

 printf("no delete position!\n");

 else

 {for(j=i;j<=(L->length)-1;j++)

 L->elem[j]=L->elem[j+1];

 L->length--;

 }

 }

3、完整程序;

#include <stdio.h>

#include <stdlib.h>

#define ListSize 100

typedef struct

 {int elem[ListSize];

  int length;

  }SeqList;

void CreateList(SeqList *L,int n)

 {int i;

  printf("please input nnumbers:\n");

  for(i=1;i<=n;i++)

  scanf("%d",&L->elem[i]);

  L->length=n;

  }

void PrintList(SeqList *L,int n)

 {int i;

 printf("the sqlistis\n");

 for(i=1;i<=n;i++)

 printf("%d",L->elem[i]);

 printf("\n");

 }

int LocateList(SeqList *L,int  x)

 {int i;

 i=1;

 while (((L->elem[i])!=x)&&(i<=10))

  ++i;

 if ((L->elem[i])==x) return(i);

 else return(0);

}

void InsertList(SeqList *L,int x,int i)

 {int j;

 if (i<1 ||i>L->length+1)

  printf("no insertposition!\n");

 else

  {for(j=L->length;j>=i;j--)

   L->elem[j+1]=L->elem[j];

  L->elem[i]=x;

  L->length++;

  }

 }

void DeleteList(SeqList *L,int i)

 {int j;

 if (i<1 ||i>L->length)

  printf("no deleteposition!\n");

 else

 {for(j=i;j<=(L->length)-1;j++)

  L->elem[j]=L->elem[j+1];

 L->length--;

 }

 }

void main()

    SeqList L;

    int i,x;

    int n=10;  

    L.length=0;

    CreateList(&L,n);

    PrintList(&L,L.length);

    printf("input the researchelement:");

    scanf("%d",&x);

    i=LocateList(&L,x);

    printf("the researchposition is %d\n",i);

    printf("input the positionof insert:");

    scanf("%d",&i);

    printf("input the value ofinsert:");

    scanf("%d",&x);

    InsertList(&L,x,i);  

    PrintList(&L,L.length);

    printf("input the positionof delete:");

    scanf("%d",&i);

    DeleteList(&L,i); 

    PrintList(&L,L.length);

}


4、总结、运行结果和分析。

线性表的基本操作实现及其应用

5、总体收获和不足,疑问等。

  通过这次写实验报告,我深切理解到了这门课的本质。刚开始学习这门课时,还不清楚这门课程的目的,现在,我懂得了:数据结构像是身体的骨骼。数据结构是个框架,模型,抽象数据类型中列举了各种操作,而所用的C++语言,将各种操作描述出来构成算法。

  这次编写顺序表遇到的问题不少,最终通过查阅资料和与同学讨论完成了实验报告,相信在过后的课时中能不断提升自己能力。