/*我們的計量方式,除下標從0開始外,其餘都從1開始算,所以只有在涉及訪問數組的時候,要注意是否要+1 或-1*/
#include <stdio.h>
#define MAXSIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FLASE 0
typedef struct
{
int No;
int grade;
} ElemType;
typedef struct
{
ElemType data[MAXSIZE];//the max length of the list
int length;
}SqList;
void InitList(SqList* L)
{
L->length = 0;
}
int GetElem(SqList* L,int i,ElemType* e)
{
if(L->length == 0 || i > L->length || i < 1)
return ERROR;
*e = L->data[i-1];
return OK;
}
int CreatList(SqList* L)
{
int i;
printf("ready to create the list,please input the length\n");
scanf("%d",&L->length);
if(L->length > MAXSIZE)
fprintf(stderr,"out of memory!\n");
for(i = 0; i <= L->length - 1;i++)
{
printf("data %d= ",i+1);
scanf("%d %d",&L->data[i].No,&L->data[i].grade);
}
}
int InsertList(SqList*L,int i,ElemType* e)
{
int k;
if(L->length == MAXSIZE)
return ERROR;
if(i < 1 || i > L->length + 1)
return ERROR;
if(i <= L->length)
{
for(k = L->length; k >= i; k--)
{
L->data[k] = L->data[k - 1];
}
}
L->data[i - 1] = *e;
L->length++;
return OK;
}
int DeleteList(SqList* L,int i)
{
int k;
if(L == NULL || i > L->length)
return ERROR;
for(k = i; k <= L->length;k++ )
{
L->data[k - 1] = L->data[k];
}
L->length --;
return OK;
}
void ShowList(SqList* L)
{
int i;
for(i = 0; i <= L->length - 1;i++)
{
printf("%d %d \n",L->data[i].No,L->data[i].grade);
}
}
int ListLength(SqList* L)
{
return L->length;
}
/*return the location(num) of the element*/
int LocateElem(SqList* L,ElemType* e)
{
int i,res;
for(i = 0; i < L->length; i++)
{
if(L->data[i].No == e->No && L->data[i].grade == e->grade)
res = i+1;
else
res = -1;
}
return res;
}
/*combine two lists,if the element in l2 is not existent in l1,insert the element into l1*/
void CombineList(SqList* L1,SqList* L2)
{
int L1_len,L2_len,i;
ElemType e;
L1_len = ListLength(L1);
L2_len = ListLength(L2);
for(i = 1; i <= L2_len;i++)
{
GetElem(L2,i,&e);
if(LocateElem(L1,&e) == -1)
{
InsertList(L1,i,&e);
}
}
}
int main()
{
SqList L1;
SqList L2;
InitList(&L1);
InitList(&L2);
printf("SqList L1:\n");
CreatList(&L1);
printf("SqList L2:\n");
CreatList(&L2);
CombineList(&L1,&L2);
ShowList(&L1);
return 0;
}
結果示意:數據結構-線性表之順序存儲結構
一、線性表的順序存儲需要三個屬性
1.存儲空間的起始位置
2.線性表的最大存儲容量
3.線性表的當前長度
二、線性表的時間複雜度:
線性表的順序存儲結構,在存、讀數據時,不管是哪個位置,時間複雜度都是O(1); 插入刪除的時間複雜度是O(n),所以線性表適合元素個數不太變化,而更多是存取數據的應用。
三、線性表的結構示意圖:
四、代碼示例:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.