- 算法设计:假设以两个元素值非递减有序排列的线性表A和B分别表示两个集合,在同一表(A或B)中可能存在值相同的元素,求A和B的交集,存放在A表空间中,要求新生成的交集A表中的元素值各不相同且按非递减有序排列。(本题线性表采用顺序存储映像)
#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define TRUE 1; #define FALSE 0; #define OK 1; #define ERROR 0; #define INFEASIBLE - 1; typedef int Status; typedef int ElemType; typedef struct { ElemType* elem; int length; int listsize; }SqList; Status InitList_Sq(SqList& L) { L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if (!L.elem) return ERROR; L.length = 0; L.listsize = LIST_INIT_SIZE; return OK; } Status List_Add_Length(SqList& L) { ElemType* newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType)); if (!newbase) return ERROR; L.elem = newbase; L.listsize += LISTINCREMENT; return OK; } Status List_Insert_one_Sq(SqList& L, ElemType x, int loc) { int i; for (i = L.length - 1; i > loc; i--) { L.elem[i] = L.elem[i - 1]; } L.elem[loc] = x; return OK; } Status List_Insert_Sq(SqList& L, ElemType x) { int loc = 0; L.length++; if (L.length >= L.listsize) List_Add_Length(L); if (x <= L.elem[0]) { List_Insert_one_Sq(L, x, loc); return OK; } else if (x >= L.elem[L.length - 2]) { loc = L.length - 1; List_Insert_one_Sq(L, x, loc); return OK; } for (int i = 1; i < L.length - 1; i++) { if (x <= L.elem[i]) { loc = i; List_Insert_one_Sq(L, x, loc); return OK; } } return ERROR; } Status List_Delete_one_Sq(SqList& L, int loc,ElemType &e) { int i; e = L.elem[loc]; for (i = loc; i < L.length ;i++) { L.elem[i] = L.elem[i+1]; } L.length--; return OK; } Status List_Occur(SqList& A, SqList& B) { int i, j,k=0,e; for (i = 1; i < A.length; i++) { for (j = 1; j < B.length; j++) { if (A.elem[i] == B.elem[j]) { k = 1; break; } } if (k == 0) { List_Delete_one_Sq(A, i, e); } } return OK; } int main() { SqList A,B; InitList_Sq(A); InitList_Sq(B); A.length = 9; int i; for (i = 0; i < 9; i++) { A.elem[i] = i; } B.length = 9; for (i = 0; i < 9; i++) { B.elem[i] = i*2; } cout << "A="; for (i = 0; i < A.length; i++) { cout << A.elem[i] << ' '; } cout << "\nB="; for (i = 0; i < B.length; i++) { cout << B.elem[i] << ' '; } List_Occur(A, B); cout << "\nA="; for (i = 0; i < A.length; i++) { cout << A.elem[i] << ' '; } free(A.elem); free(B.elem); return 0; }
假设以两个元素值非递减有序排列的线性表A和B分别表示两个集合,在同一表(A或B)中可能存在值相同的元素,求A和B的交集,存放在A表空间中,要求新生成的交集A表中的元素值各不相同且按非递减有序排列。
最新推荐文章于 2024-07-14 13:39:50 发布