线性结构-线性顺序表
- 线性顺序表定义:用一组连续的存储单元(地址连续)依次存放线性表的各个数据元素。即:在顺序表中逻辑结构上相邻的数据元素,其物理位置也是相邻的。
- 线性顺序表优缺点:
优点:
(1)无须为表示结点间的逻辑关系而增加额外的存储空间。
(2)可以方便地随机存储表中的任一结点。
缺点:
(1)插入和删除平均须移动一半结点。
(2)存储分配只能预先进行(静态)
过大 浪费
过小 溢出(动态分配可调整) - C语言实现
#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 100
typedef int datatype; //宏定义数据类型
typedef struct //宏定义结构体
{
datatype data[MAXSIZE]; //数据
int length; //数据长度
}SqList;
SqList SqL;
datatype GetElement(SqList *L,int i); //获取链表第i个内容
int SearchElement(SqList *L,datatype e); //查看列表中是否存在存在某元素
int ListInsert(SqList *L,int loc,datatype x); //插入元素到某个loc后
void LisDeletet(SqList* L,int loc);
void ListLength(SqList* L,int length);
void ShowSqlist(SqList* L);
int score[10]={77,88,99,56,87,90,22,87,90,56};
int main()
{
int i,k,e;
for (i=0;i<10;i++)
{
SqL.data[i]=score[i];
SqL.length++;
}
//打印原始列表
printf("original list\n");
ShowSqlist(&SqL);
//插入数据99
e=99;
k=ListInsert(&SqL,1,e);
ShowSqlist(&SqL);
//删除第10个元素
LisDeletet(&SqL,10);
ShowSqlist(&SqL);
//获取链表第2个内容
printf("链表第2个内容:");
datatype ee;
ee=GetElement(&SqL,1);
printf("%2d\n",ee);
//查看87在链表中的位置
printf("查看87在链表中的位置:");
int index=SearchElement(&SqL,87);
printf("%2d\n",index);
//查看链表长度
int length;
ListLength(&SqL,length);
LisDeletet(&SqL,5);
ListLength(&SqL,length);
system("pause");
return 0;
}
datatype GetElement(SqList *L,int i)
{
return L->data[i];
}
int SearchElement(SqList *L,datatype e)
{
for (int i=0;i<L->length;i++)
{
if(i==L->length)
{
printf("can't found the data\n");
return(-1);
}
else
{
if(L->data[i]==e)
{
return i;
}
}
}
}
int ListInsert(SqList *L,int loc,datatype x)
{
int i;
if (L->length<0)
{
printf("表长错误\n");
return(-1);
}
if (loc<1||loc>L->length+1)
{
printf("插入位置i不适当\n");
return(-1);
}
for (i=L->length;i>loc;i--)
{L->data[i]=L->data[i-1];};
L->data[i]=x;
L->length++;
printf("\nInsert success\n");
return(0);
}
void LisDeletet(SqList* L,int loc)
{
int i;
if(loc<1||loc>L->length)
{ printf("Position error");
return;
}
for(i=loc;i<=L->length;i++)
{L->data[i]=L->data[i+1];};
L->length--;
printf("Delete success\n");
}
void ShowSqlist(SqList* L)
{
int i;
for (i=0;i<L->length-1;i++)
{
printf("%2d-->",L->data[i]);
if (i%4==3) printf("\n");
}
printf("%2d\n",L->data[i]);
}
void ListLength(SqList* L,int length)
{
length=L->length;
printf("length=%d\n",length);
}
结果运行
能给你有所帮助就是我最大的荣誉 ! 不积硅步,无以至千里,加油!