设计一个算法,将一个头结点为 A 的单链表(其数据域为整数)分解成两个单链表 A 和 B ,使得 A 链表只含有原来链表中 data 域为奇数的结点,而 B 链表只含有原链表中 data 域为偶数的结点,且保持原来的相对顺序。
voidsplist2(LNode *A, LNode *B){
LNode *p,*q,*r;B=(LNode *)malloc(sizeof(LNode));B->next =NULL;
r =B;
p =A;while(p->next !=NULL){if(p->next !=NULL){
q = p->next;
p->next = q->next;
q->next =NULL;
r->next = q;
r = q;}else
p = p->next;}}
思考题
有 N 个个位正整数存放在 int 型数组 A[0,…,N-1]中,N为已定义的常量且N
≤
\leq
≤ 9,数组 A[]的长度为N,另给一个 int 型变量 i ,要求只用上述变量(A[0]~A[N-1]与i,这N+1个整型变量)写一个算法,找出这N个整数中的最小者,并且要求不能破坏数组 A[]中的数据。
voidfindMin(int A[], int &i){
i =A[0];while(i/10<=N-1){if(i%10>A[i/10]){
i = i - i%10;
i = i +A[i/10];}
i = i %10;}}
#include <iostrean>
using namespace std;
typedef struct LNode
{
int data;
struct LNode* next;}LNode;
int isEqual(LNode*A, LNode*B){
LNode* p =A->next;
LNode* q =B->next;while(p !=NULL&& q !=NULL){if(p->data == q->data){
p = p->next;
q = q->next;}elsereturn0;}if(p !=NULL&& q !=NULL)return0;elsereturn1;}voidcreateList(LNode *&head, int arr[], int n){
head =(LNode *)malloc(sizeof(LNode));
head->next =NULL;
LNode* r = head;for(int i =0; i < n;++i){
LNode* p =(LNode *)malloc(sizeof(LNode));
p->data = arr[i];
p->next =NULL;
r->next = p;
r = p;}}
int main(){
int a[]={1,2,3,4,6};
int b[]={1,2,3,4,5};
LNode*A;
LNode*B;createList(A, a,5);createList(B, b,5);
cout<<isEqual(A,B)<<endl;return0;}
设 A=(a1,a2,···,am)和 B=(b1,b2,···,bn)均为顺序表,A’ 和 B’ 分别是除去最大公共前缀后的子表。例如,A=(b,e,i,j,i,n,g),B=(b,e,i,f,a,n,g),则两者的最大公共前缀为b,e,i,在两个顺序表中除去最大公共前缀后的子表分别为 A’=(j,i,n,g),B’=(f,a,n,g)。若 A’ = B’ =空表,则 A=B。若 A’=空表且 B’
≠
\neq
=空表,或两者均不为空且 A‘的第一个元素值小于 B’ 的第一个元素值,则 A<B,否则 A>B。所有表中元素均为 float型,试编写一个函数,根据上述方法比较 A 和 B 的大小。
int compare(float A[], int An, float B[], int Bn){
int i =0;while(i < An && i < Bn){if(fabs(A[i]-B[i])< min)++i;elsebreak;}if(i >= An && i >= Bn)return0;elseif((i >= An && i < Bn)||A[i]<B[i])return-1;elsereturn1;}