练习设有两个按元素递增的有序表A和B设计一个算法将-资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
hc=pa; hc->next=NULL; tc=hc; while (pa!=NULL && pb!=NULL) { if (pa->data<pb->data)
{ tc->next=pa; tc=pa; pa=pa->next;} else if (pa->data>pb->data)
{ tc->next=pb; tc=pb; pb=pb->next;} else { tc->next=pa; tc=pa; pa=pa->next;
q=p; pre->next=p->next; p=p->next; free(q); } else { p->coef*=p->expn; p->expn--; pre=p; p=p->next; } } }
2020/4/13
练习1:设有两个按元素递增的有序表A和B,设计一个
算法将A和B的全部元素合并为一个按元素递增表C。
void Merge(SqList A,SqList B,SqList &C)
练习2:设有一线性表按顺序存储,且每个元素互不相等,
设计把所有奇数移到所有偶数前边的算法。
线性表描述为:
const int MAXSIZE=顺序表容量;
int expn; struct node *next; }PolyNode; 设计一个算法求多项式的导数。
2020/4/13
void CompPoly(PolyNode *sq) { PolyNode *pre=sq, *p=sq->next, *q;
while(p) {
if(p->expn= =0) {
struct node *next; }SLink;
//线性表中实际元素个数
1、设计一个算法,通过一趟遍历求单链表中元素最大的结点。
2、设ha和hb分别是两个带头结点的非递减有序单链表的表头指
针,试设计一个算法,将这两个有序链表合并成一个非递减有 序单链表。要求结果链表仍使用原来两个链表的存储空间,不 另外占用其他的存储空间。表中允许有重复的数据。
2020/4/13
1:
SLink *MaxNode(SLink *sq) { SLink *p=sq->next,*q=p;
while (p!=NULL) {
if (p->data>q->data) q=p;
p=p->next; } return q; }
2020/4/13
2:
SLink *Merge(SLink *ha,SLink *hb) { SLink *pa=ha->next,*pb=hb->next,*hc,*tc;
2020/4/13
void Move(SqList A) { //将整型ቤተ መጻሕፍቲ ባይዱ素互不相等的线性表A中的奇数移到偶数之前
int i=0,j,k; j=A.len-1; ElemType temp; while(i<=j) { while(A.data[i]%2==0) i++; while(A.data[j]%2==1) j--; if(i<j) { temp=A.data[i];A.data[i]=A.data[j];A.data[j]=temp;} } }
tc->next=pb; tc=pb; pb=pb->next; } } tc->next=NULL; if (pa!=NULL) tc->next=pa; if (pb!=NULL) tc->next=pb; return hc; }
2020/4/13
作业:
设多项式单链表结点定义为: typedef struct node { float coef;
for (i=0;i<A.len;i++) { if (A.data[i]>=x && A.data[i]<=y) k++;
else A.data[i-k]=A.data[i]; } }
2020/4/13
作业:
设单链表定义为: typedef struct node { ElemType data;
2020/4/13
思考题: 设计一个算法,从一给定的顺序表中删除元素值在X和Y之间 的所有元素(X<=Y)。尽量使算法效率高。
思路:从前向后扫描顺序表,用k记录元素在X和Y之间的个数(k 初值为0)。对于当前元素,若不在X和Y之间,则前移k个位 置;否则,k++。
void DelNode(SqLink &A, ElemType x, ElemType y) { int i,k=0;
i++;k++;} else { C.data[k]=B.data[j];
j++;k++;} } while(i<A.len) { C.data[k]=A.data[i]; i++;k++;} while(j<B.len) { C.data[k]=B.data[j]; j++;k++;} C.len=k; }
typedef struct
{ ElemType data[MAXSIZE];
int len;
//线性表中实际元素个数
}SqList;
2020/4/13
void Merge(SqList A,SqList B,SqList &C) { //将有序表A,B合并为有序表C
int i=0,j=0,k=0; while (i<A.len && j<B.len) { if(A.data[i]<=B.data[j]) { C.data[k]=A.data[i];
相关文档
最新文档