实验日期 2010.4.19 教师签字 成绩
实 验 报 告
【实验名称】 第二章线性表的基本操作及应用 【实验目的】
(1)熟练掌握线性表的基本操作的实现;
(2)以线性表的各种操作(建立、插入、删除等)的实现为重点;
(3)通过本次实验加深对C语言的使用(特别是函数的参数调用、指针类型 的应用和链表的建立等各种基本操作)。
【实验内容】
1. 顺序表的基本操作(顺序表的插入、访问、删除操作)
#include
#define OK 1 #define ERROR 0
#define OVERFLOW -1 typedef int ElemType; typedef int Status;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10 typedef struct{ ElemType *elem; int length; int listsize; }SqList;
Status InitList_Sq(SqList *L){ int i,n;
L->elem = (ElemType * )malloc(LIST_INIT_SIZE*sizeof(ElemType)); if (! L->elem) exit (OVERFLOW);
printf(\您希望您的顺序表有几个元素: \ scanf(\ printf(\
printf(\输入您的%d个元素,以构建顺序表: \\n\ for(i=1;i<=n;i++)
scanf(\ L->length = n;
L->listsize = LIST_INIT_SIZE; return OK; }//InitList_Sq
Status PrintList_Sq(SqList L){ int i;
printf(\顺序表中的元素为: \ for (i=1;i<=L.length;i++)
printf(\ \ printf(\ return OK; }//PrintList_Sq
int ListInsert_Sq(SqList* L,int i,ElemType x) //对顺序表进行插入操作 {int j;
if (L->length==L->listsize)
{printf(\顺序表已满\else {
if (i<1||i>L->length)
{printf(\位置不合法\ else {
for(j=L->length-1;j>=i-1;--j) L->elem[j+1]=L->elem[j]; L->elem[i-1]=x; L->length++; return 1; } } }
int ListDelete_Sq(SqList* L,int i) //对顺序表进行删除操作 {int j;
if (i<1||i>L->length)
{printf(\不存在第i个元素\else {
for (j=i-1;j
L->elem[j]=L->elem[j+1]; } L->length--; return 1; } }
int LocateElem(SqList *L, int i) {
if(i<1||i>L->length)return ERROR; else return L->elem[i-1]; }
int scan() {
int choose;
printf(\选择要执行的基本操作:\\n1.插入元素;2.删除元素;3.访问元素.\\n\ printf(\输入其他值退出程序……\\n\ scanf(\ return(choose); }
void main(){
SqList L; ElemType e; int i;
int quit=0;
if (InitList_Sq(&L)==OVERFLOW) printf(\分配失败,退出程序!\ printf(\输出程序中的元素\\n\ PrintList_Sq(L); while(!quit) switch(scan()){
case 1:printf(\请输入你所需要插入的位置和你要插入的元素:\ printf(\请输入i和e的值:\ scanf(\
if (ListInsert_Sq(&L,i,e)==OK) PrintList_Sq(L);break; case 2:printf(\请输入你所需要删除元素的位置:\ scanf(\
if(ListDelete_Sq(&L,i)==OK) PrintList_Sq(L);break; case 3:printf(\请输入所要查找元素的位置:\\n\ scanf(\ if(LocateElem(&L,i))
printf(\该位置元素的值为:%d!\\n\ else printf(\该位置的元素不存在!\\n\ default:quit=1;