实验一 线性表的顺序表示与实现
实验目的
掌握线性表的顺序存储结构;
验证顺序表及其基本操作的实现;
掌握数据结构及算法的程序实现的基本方法。
实验内容
建立含有若干个元素的顺序表;
对已经建立的顺序表实现插入、删除、查找、合并等基本操作。
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define TRUE 1
#define FLASE 0
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100#define LISTINCREMENT 10
typedef int Status;
typedef struct
{
int *elem;
int lenth;
int listsize;
}Sqlist;
Status InitList_Sqlist(Sqlist *L)
{
(*L).elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!(*L).elem) exit(OVERFLOW);
(*L).lenth = 0;
(*L).listsize = LIST_INIT_SIZE;
return OK;
}
int greatelist_sq(Sqlist *L)
{
int i;
printf("请输入数据\n");
for(i = 0;i < (*L).lenth; i++)
{
scanf("%d",&(*L).elem[i]);
}
return OK;
}
Status listinsert_sq(Sqlist *L,int i,int e)
{
int *p, *q, *newbase;
if(i < 1 || i > (*L).lenth) return ERROR;
if((*L).lenth >= (*L).listsize)
{
newbase = (int *)realloc((*L).elem,((*L).listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) exit(OVERFLOW);
(*L).elem = newbase;
(*L).listsize += LISTINCREMENT;
}
q = &((*L).elem[i-1]);
for(p=&((*L).elem[(*L).lenth-1]);p >= q;--p)
*(p+1) = *p;
*q = e;
++(*L).lenth;
return OK;
}
Status listdelete_sq(Sqlist *L,int i,int &e)
{
int *p, *q;
if(i < 1||i > (*L).lenth) return ERROR;
p = &((*L).elem[i-1]);
e = *p;
q = (*L).elem+(*L).lenth-1;
for(++p;p <= q;++p)
*(p-1) = *p;
--(*L).lenth;
return OK;
}
void output(Sqlist *L)
{
printf("输出序列为:\n");
int i;
for(i = 0;i < (*L).lenth; i++)
printf("%d ",(*L).elem[i]);
printf("\n");
}
int main()
{
int i, n, e;
Sqlist L;
InitList_Sqlist(&L);
printf("\n");
scanf("%d",&n);
L.lenth = n;
greatelist_sq(&L);
output(&L);
scanf("%d%d",&i,&e);
listinsert_sq(&L,i,e);
output(&L);
scanf("%d",&i);
e = 0;
listdelete_sq(&L,i,e);
printf("被删除的元素为第%d位的%d\n",i, e);
output(&L);
return 0;
}