1、线性表:最常用最简单的数据结构,是一个n个数据元素的有限序列。
2、理解重点:顺序存储,任意存取
3、实现线性表前的一些宏定义以及typedef
1 #define LIST_INIT_SIZE 100//存储空间初始分配量 2 #define LISTINCREMENT 10//存储空间的分配增量 3 4 #define ERROR 0 5 #define OK 1 6 #define TURE 1 7 #define FALSE 0 8 9 typedef int ElemType; 10 typedef int Status;
线性表的存储结构
1 typedef struct{ 2 ElemType *elem; //存储空间基址 3 int length;//当前长度 4 int listsize;//当前分配的长度 5 }SqList;
4、部分算法。
1、初始化空表
Status InitList_Sq(SqList *L){ L->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L->elem) { exit(1);//这里存储空间分配失败怎么写??异常退出 } L->length = 0; L->listsize = LIST_INIT_SIZE; return OK; }
2、输出线性表
void Output_L(SqList *L) { for(int i = 0;i<L->length;i++) { printf("%d ",L->elem[i]); } printf("\n"); }
3、插入数,参数有插入位置和插入的数(书上的是插入的数的地址)
Status ListInsert_Sq(SqList *L,int i,int e){ int *newbase; int *q; int *p; if(i < 1 || i > L->length) { return ERROR; } if(L->length >= L->listsize) { newbase = (int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int)); if(!newbase) { exit(1); } L->elem = newbase; L->listsize += LISTINCREMENT; } q = &(L->elem[i-1]); for(p = &(L->elem[L->length-1]);p >= q; --p) { *(p+1) = *p; } *q = e; L->length++; return OK; }
4、删除线性表的一个数,参数给定位置,保存删除的值
Status ListDelete_Sq(SqList *L,int i,ElemType *e) { int *p; int *q; if(i < 1 || i > L->length) { return ERROR; } p = &(L->elem[i-1]); *e = *p; q = L->elem+L->length-1;//表尾元素位置 //elem其实是数组的名字,数组首地址 for(++p;p<=q;++p){ *(p-1) = *p; } L->length--; return OK; }
5、查找值,给定值,如果线性表中有就返回位置,如果线性表中没有,就返回0
int LocateElem(SqList *L,ElemType *e) { ElemType *p; p = L->elem; int i = 1; while(i <= L->length){ if(*e == *p) { break; } i++; p++; } // printf("%d\n",i); if(i <= L->length) { return i; } else{ return 0; } }
6、对应主函数
int main() { int j; int a=0; int *e = (int *)malloc(sizeof(int)); SqList *L1 = (SqList *)malloc(sizeof(SqList)); //SqList L1[1]; InitList_Sq(L1); L1->length = 10; for(j = 0; j<L1->length; j++) { L1->elem[j] = j; } Output_L(L1); ElemType LI1 = 8; ListInsert_Sq(L1,5,LI1); Output_L(L1); ListDelete_Sq(L1,5,e); Output_L(L1); printf("%d\n",*e); *e =4; a= LocateElem(L1,e); printf("%d\n",a); free(L1->elem); free(L1); free(e); return 0; }
7、还有两个线性表的操作,后期可能会补。
标签:线性表,int,elem,length,SqList,L1 From: https://www.cnblogs.com/gunancheng/p/17438270.html