虽然线性表有顺序表和链表,但是难点主要在于链表,因此练习中链表占绝大一部分
下面配上题目以及解答,如果有需改进的地方欢迎各位大佬指正。
1.1【解答】
#include1.2#include #include "list.h" // 请不要删除,否则检查不通过 void lnk_merge(LinkList A, LinkList B, LinkList C) { LinkList pa=A->next,pb=B->next; while(pa&&pb){ C->next=pa; pa=pa->next; C=C->next; C->next=pb; pb=pb->next; C=C->next; } // C->next=pa?pa:pb; if(pa){ C->next =pa; }else{ C->next =pb; } }
【解答】
#include1.3#include #include "list.h" // 请不要删除,否则检查不通过 int lnk_search(LinkList L, int k, ElemType* p_ele) { LinkList p=L; int cnt=0; while(p->next){ cnt++; p=p->next; } p=L; int i; if(k<0||k>cnt){ return 0; } for(i=1;i<=cnt-k+1;i++){ p=p->next; } *p_ele=p->data; return 1; }
【解答】
#include1.4#include #include "list.h" // 请不要删除,否则检查不通过 void lnk_del_x2y(LinkList L, ElemType mink, ElemType maxk) { LinkList left = NULL; LinkList right = NULL; LinkList tmp = NULL; //找到左指针 while (L->next != NULL) { if ((L->next->data > mink) && (L->next->data < maxk)) { left = L; L = L->next; break; } else { L = L->next; } } //找到右指针 while (L->next != NULL) { if ((L->data > mink) && (L->data < maxk)) { tmp = L; L = L->next; free(tmp); } else { right = L; break; } } if (right == NULL) return; left->next = right; }
【解答】
#include1.5#include #include "list.h" // 请不要删除,否则检查不通过 void odd_even(SeqList *L) { int* left = &(L->elem[0]); int* right = &(L->elem[L->last]); int tmp; while (left < right) { //左边是偶数 if (*left % 2 == 0) { //右边是奇数 if (*right % 2 == 1) { //交换 tmp = *left; *left = *right; *right = tmp; left++; right--; } else { right--; } } else { //左边是奇数 left++; } } }
【解答】
#include1.6#include #include "list.h" // 请不要删除,否则检查不通过 void del_dupnum(SeqList *L) { int min = L->elem[0]; int tmp = L->elem[0]; for (int i = 1; i <= L->last; i++) { if (L->elem[i] == tmp) L->elem[i] = min; else tmp = L->elem[i]; } int p = 1, q = 1; while (q <= L->last) { if (L->elem[q] != min) { L->elem[p] = L->elem[q]; p++; } q++; } L->last = p - 1; }
【解答】
#include#include #include "list.h" // 请不要删除,否则检查不通过 void del_x2y(SeqList *L, ElemType x, ElemType y) { int i=0,j=0; while(i<=L->last){ if((L->elem[i]>=x)&&(L->elem[i]<=y)){ i++; }else{ L->elem[j]=L->elem[i]; i++; j++; } } L->last=j-1; }



