6-1 顺序表的实现 || 6-2 两个有序链表序列的合并
本题要求实现六个函数,顺序表为整型数据,可实现输入、输出、取值、查找、插入、删除功能。输入样例与输出样例对应情况见下图。
//int GetElem(SqList L, int i, ElemType &e) 顺序表的取值 //判断i值是否合理,若不合理,返回0;[i-1]单元存储第i个数据元素; 返回1 int GetElem(SqList L, int i, ElemType &e) { if(i < 1 || i > L.length) return 0; e = L.elem[i - 1]; return 1; } //int LocateElem_Sq(SqList L, double e) 顺序表的查找 //查找成功,返回序号i+1;查找失败,返回0 int LocateElem_Sq(SqList L, double e) { for(int i = 0 ; i < L.length ; i++) { if(e == L.elem[i]) return i+1; } return 0; } //int ListInsert_Sq(SqList &L, int i, ElemType e)顺序表的插入 //判断i值,不合法返回0;当前存储空间已满,返回0;插入位置及之后的元素后移;将新元素e放入第i个位置;表长增1;返回1 int ListInsert_Sq(SqList &L, int i, ElemType e) { if(i < 1 || i > L.length) return 0; if(L.length == MAXSIZE) return 0; for(int j = L.length ; j >= i-1 ;j--) { L.elem[j+1] = L.elem[j]; } L.elem[i-1] = e; L.length++; return 1; } //int ListDelete_Sq(SqList &L, int i)顺序表的删除 //判断i值,不合法返回0;被删除元素之后的元素前移;表长减1;返回1 int ListDelete_Sq(SqList &L, int i) { if(i < 1 || i > L.length) return 0; for(int j = i-1 ; j < L.length - 1 ;j++) { L.elem[j] = L.elem[j+1]; } L.length--; return 1; } //void ListInput(SqList &L)顺序表数据的输入 //输入顺序表长度;依次输入数据;表长赋值 void ListInput(SqList &L) { int s; cin>>s; for(int i = 0 ; i < s ; i++) { int t; cin>>t; L.elem[i] = t; } L.length = s; } //void ListOutput(SqList L)顺序表数据的输出 void ListOutput(SqList L) { for(int i = 0 ; i < L.length ;i++) { cout<<L.elem[i]<<" "; } cout<<endl; }
本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。
List Merge( List L1, List L2 ) { List L; List p; List q; List r; L = (List)malloc(sizeof(struct Node)); p = L1->Next; q = L2->Next; L->Next = NULL; r = L; while(p != NULL && q != NULL ) { if(p->Data < q->Data) { r ->Next = p; p = p->Next; r = r->Next; } else { r ->Next = q; q = q->Next; r = r->Next; } } if(p != NULL) r->Next = p; if(q != NULL) r->Next = q; L1->Next = NULL; L2->Next = NULL; return L; }