線性表(list):零個或多個元素(相同的資料類型)的有限序列(有先後順序)。
線性表的基本操作:
Operation: | 傳回值: |
---|---|
InitList(*L) | 建立一個空的線性表 |
ListEmpty(L) | 若為空,則傳回true,否則傳回false |
ClearList(*L) | 清空list |
GetElem(L,i,*e) | 傳回第i個元素值給e,成功返1否返0 |
LocateElem(L,e) | 若有e,傳回序号,否則傳回0 |
ListInsert(*L,i,e) | 插入元素e |
ListDelete(*L,i,*e) | 删除第i個元素,傳回其值e |
ListLength(L) | 傳回線性表元素個數 |
1、 線性表的順序存儲結構:用一段位址連續的存儲單元依次存儲線性表的資料元素。
(C語言之typedef:ypedef可以看作type define的縮寫,顧名思義就是類型定義,也就是說它隻是給已有的類型重新定義了一個友善使用的别名,并沒有産生新的資料類型。
typedef的使用與宏定義define有些許的相似,但兩者又有以下不同:
1.與#define不同,typedef給出的符号名稱僅限于對類型,而不是對值。
2.typedef的解釋由編譯器,而不是預處理器執行。
3.typedef比#define更靈活。)
(結構體成員變量的通路,->前面放的是指針,而.前面跟的是結構體變量,如已定義了一個結構體struct student,裡面有一個int a;然後有一個結構體變量struct student stu及結構體變量指針struct student *p;且有p=&stu,那麼p->a(等價于(*p).a)和stu.a表示同一個意思。)
#include<stdio.h>
/*線性表結構*/
#define MAXSIZE
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
int length;
}SqList;
/***********/
/*查找*/
int GetElem(SqList L,int i,ElemType *e)
{
if(L.length==||i<||i>L.length)
return ;
*e=L.data[i-];
return ;
}
/******/
/*插值*/
int ListInsert(SqList *L,int i,ElemType e)
{
int k;
if(L->length==MAXSIZE)
return ;
if(i<||i>L->length+)
return ;
if(i<=L->length)
{
for(k=L->length;k>=i;k--)
L->data[k]=L->data[k-];
}
L->data[i-]=e;
L->length++;
return ;
}
/******/
/*删除元素*/
int ListDelete(SqList *L,int i,ElemType *e)
{
int k;
if(L->length==)
return ;
if(i<||i>L->length)
return ;
*e=L->data[i-];
if(i<L->length)
{
for(k=i;k<L->length;k++)
L->data[k-]=L->data[k];
}
L->length--;
return ;
}
/**********/
void main()
{
SqList L1;
SqList *PL1;
ElemType e1;
ElemType *pe;
int p = ;
int j;
pe = &p;//注意,記得指針使用前需要初始化
PL1=&L1;
for(j=;j<;j++)
{
L1.data[j]=j+;
}
//e=&L1.data[5];
L1.length=;
GetElem(L1,,pe);
printf("GetElem 5 =%d\n",*pe);//printf("%d\n",p);
ListInsert(PL1,,);
ListDelete(PL1,,pe);
printf("GetElem 5 =%d\n",*pe);
for(j=;j<L1.length;j++)
{
printf("L1.data[%d]=%d\n",j,L1.data[j]);
}
getchar();
}