1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
|
typedef int Status; typedef int ElemType;
typedef struct{ int data[maxsize]; int length; }SqList;
Status CreatList(SqList *L){ int tempdata; L->length=0; for(int i=0;i<=maxsize;i++){ printf("请输入第%d个元素的值,-1结束\n", i+1); scanf("%d", &tempdata); if(tempdata==-1){ return OK; } L->data[i] = tempdata; L->length++; } return OK; }
Status getLength(SqList *L){ return L->length; }
Status insertList(SqList *L, int i, ElemType e){ if(L->length==maxsize){ printf("目前线性表的长度已满,不可再插入元素"); return ERROR; } if(i<1||i>L->length+1){ printf("您输入的插入位置有误"); return ERROR; } if(i!=L->length+1){ for(int i=i;i<L->length;i++){ L->data[i]=L->data[i-1]; } } L->data[i-1]=e; return OK; }
Status printList(SqList *L){ for(int i=0;i<L->length;i++){ printf("\n第%d个元素为%d", i+1, L->data[i]); } return OK; }
Status deleteList(SqList *L, int i, int *e){ if(L->length==0){ printf("线性表的长度为0,不可进行删除操作"); return ERROR; } if(i==0||i>L->length){ printf("您输入的删除位置有误,不可进行删除操作"); return ERROR; } e = L->data[i-1]; if(i!=L->length){ for(int n=i;n<L->length;n++){ L->data[n-1] = L->data[n]; } L->length--; return e; } L->data[i-1] = 0; return e; }
Status Union(SqList *LA, SqList *LB){ int lengtha = LA->length; int lengthb = LB->length; int isEqual = 0; for(int i=0;i<lengthb;i++){ if(searchList(LA, LB->data[i])){ isEqual = 1; } if(!isEqual){ insertList(LA, ++lengtha, LB->data[i]); LA->length++; } isEqual = 0; } return OK; }
Status searchList(SqList *LA, int e){ int lengtha = LA->length; for(int i=0;i<lengtha;i++){ if(LA->data[i]==e){ return TRUE; } } return FALSE; }
Status deleteValue(SqList *L, int e){ int i=0; while(L->data[i]!=e&&i<L->length){ i++; } if(i<L->length){ for(int n=i;n<L->length;n++){ L->data[n]=L->data[n+1]; } L->length--; return OK; } printf("线性表中没有对应的元素,无法删除"); return ERROR; }
Status mergeList(SqList *LA, SqList *LB){ int lengthb = LB->length; int isEqual = 0; for(int i=0;i<lengthb;i++){ if(searchList(LA, LB->data[i])){ isEqual = 1; } if(isEqual){ deleteValue(LA,LB->data[i]); } isEqual = 0; } return OK; } int main(int argc, const char * argv[]) { SqList sqlistA; SqList sqlistB; int e; printf("请输入线性表A的内容:\n"); CreatList(&sqlistA); printList(&sqlistA); printf("\n请输入线性表B的内容:\n"); CreatList(&sqlistB); printList(&sqlistB); printf("\n目前线性表A的长度为%d", getLength(&sqlistA)); printf("\n目前线性表B的长度为%d", getLength(&sqlistB)); Union(&sqlistA, &sqlistB); printf("\n合并后的线性表A的长度为%d, 线性表A的内容为:", getLength(&sqlistA)); printList(&sqlistA); mergeList(&sqlistA, &sqlistB); printf("\n再与线性表B进行相交的线性表A的变成了:"); printList(&sqlistA); insertList(&sqlistA, 2, 9); printf("\n向线性表A中的第二个位置插入元素9操作后得:"); printList(&sqlistA); deleteList(&sqlistA, 2, e); printf("\n将线性表A的中第二个位置元素删除操作后得:"); printList(&sqlistA); return 0; }
|