**顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。--摘自百度百科**
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string.h>
#define LISTINCREASMENT 1000
#define LISTSIZE 100000
#define OVERFLOW -1
#define OK 1
using namespace std;
int SeqInitial(Seqlist &L)
int ListInsert(Seqlist &L, int i, int e)
void ListDelete(Seqlist &L, int i, int &e)
int LocateELem(Seqlist &L, int e)
int GetElem(Seqlist &L, int i)
typedef struct
{
int *elem;
int length;
int listsize;
}Seqlist;
int SeqInitial(Seqlist &L)
{
L.elem = (int *) malloc (sizeof(int) * LISTSIZE);
if(!L.elem) exit(OVERFLOW);
L.length = 0;
L.listsize = LISTSIZE;
return OK;
}
int ListInsert(Seqlist &L, int i, int e)
{
if(i < 1 || i > L.length + 1) printf("ERROR!");
if(L.length >= L.listsize)
{
int *newbase = (int *) realloc (L.elem, (L.listsize + LISTINCREASMENT) * sizeof(int));
if(!newbase) return OVERFLOW;
L.elem = newbase;
L.listsize += LISTINCREASMENT;
}
int *q = &(L.elem[i - 1]);
int *p;
for(p = &(L.elem[L.length - 1]); p >= q; --p)
*(p + 1) = *p;
*q = e;
++L.length;
return OK;
}
void ListDelete(Seqlist &L, int i, int &e)
{
if(i < 1 || i > L.length) printf("ERROR!");
else
{
e = L.elem[i - 1];
for(; i < L.length; i++)
{
L.elem[i - 1] = L.elem[i];
}
L.length--;
}
}
int LocateELem(Seqlist &L, int e)
{
int i;
for(i = 0; i <= L.length - 1; i++)
{
if(L.elem[i] >= e)
{
break;
}
}
return i + 1;
}
int GetElem(Seqlist &L, int i)
{
if(i < 1 || i > L.length) printf("ERROR!");
else
{
return L.elem[i - 1];
}
return 0;
}
int main()
{
Seqlist L;
int i, d, n, t;
printf("请输入顺序表的初始元素个数: ");
scanf("%d", &n);
SeqInitial(L);
printf("请输入数据: ");
for(i = 1; i <= n; i++)
{
scanf("%d", &d);
ListInsert(L, i, d);
}
printf("表长: %d\n", L.length);
printf("表数据如下: ");
for(i = 1; i <= L.length; i++)
{
printf("%d ", L.elem[i - 1]);
}
printf("\n");
printf("请输入要删除元素的位置: ");
scanf("%d", &t);
ListDelete(L, t, d);
printf("被删除元素的值: %d\n", d);
printf( "删除后的表:");
for(t=1; t<=L.length; t++)
printf("%d ",L.elem[t-1]);
printf("\n");
printf("请输入要插入数值的位置: ");
scanf("%d", &t);
printf("请输入要插入数值的数值: ");
scanf("%d", &d);
ListInsert(L, t, d);
printf( "插入以后的表:");
for(t=1; t<=L.length; t++)
printf("%d ",L.elem[t-1]);
printf("\n");
printf("请输入要检索的元素的位置: ");
scanf("%d", &t);
d = GetElem(L, t);
printf("该元素的值为:%d\n",d);
printf("谢谢使用请挂机\n");
return 0;
}