线性表-c语言实现(2)
有些方法在上篇 ,这里只对 Compare()LocateElem() mergeList()insrandLinst()和更新的main()作说明。
======================================
1比较两个元素是否相等
int Compare(int *e1, int *e2) { if (*e1 == *e2) { return 1; } else return 0; }
2 元素e在线性表中的下标
int LocateElem(SqList *L, int *e) { //返回某个元素的下标 int i = 0; for (i = 0; i < L->length; i++) { //遍历元素 if (Compare(&(L->elem[i]), e)) {//比较是否相等 return i;//相等返回 } } return -1;//e不在L中 }
3 有线性表L1,L2,如果 存在元素e 属于L2 不属于L1,则插入L1中
int mergeList(SqList *L1, SqList *L2) { //存在e属于L2但不属于L1,则放入L1中 int i = 0; if (L1 == 0 || L2 == 0) { //先判断他们非空 exit(error); } for (i = 0; i < L2->length; i++) { //遍历 L2 中的每一个元素 //在每一个for中 做的仅仅是 拿到当前的 一个元素 和 L1 中所有元素进行比较,并且符合条件的插入 int *e = &(L2->elem[i]); //当前元素放入e 便于理解 if (LocateElem(L1, e) == -1) { //当前元素e 如果不在L1中 ListInsert(L1, L1->length, *e); //插入 } } return ok; }
4 随机数生成,为了生成L2 表
void insrandLinst(SqList *L, int len) { int i = 0; srand((int) time(0)); if(L==NULL)exit(error);//判断线性表是否为空 while (i < len) { L->elem[i] = rand() % 20 + 1;//申城随机数并赋值 L->length += 1; i++; } }
5测试数据 ,包含 线性表 c语言实现(上)的main 函数 ;
int main(void) { SqList *list = malloc(sizeof(int)); //看着初始化总是黄色警告心烦 SqList *list2 = malloc(sizeof(int)); //看着初始化总是黄色警告心烦 InitList(list); //这里面不能将一个指针 指定为空 InitList(list2); inlist(list, 10); insrandLinst(list2, 10); outlist(list); printf("1 listsize:%d 2 length :%d \n", list->listsize, list->length); int p = 99; ListInsert(list, 10, p); printf("1 listsize:%d 2 length :%d \n", list->listsize, list->length); outlist(list); printf("this listdel %d\n", ListDel(list, 5)); printf("1 listsize:%d 2 length :%d \n", list->listsize, list->length); printf(" 十月十一日\n"); int a = 9; printf("%d", LocateElem(list, &a)); printf("=====================\n"); outlist(list2); printf("===================\n"); mergeList(list,list2); outlist(list); printf("ok"); return EXIT_SUCCESS; }