版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、習(xí)題二2. 1描述以下四個概念的區(qū)別:頭指針變量,頭指針,頭結(jié)點(diǎn),首結(jié)點(diǎn)(第一個結(jié)點(diǎn))。解:頭指針變量和頭指針是指向鏈表中第一個結(jié)點(diǎn)(頭結(jié)點(diǎn)或首結(jié)點(diǎn))的指針;在首結(jié)點(diǎn)之前附設(shè)一個結(jié)點(diǎn)稱為頭結(jié)點(diǎn);首結(jié)點(diǎn)是指鏈表中存儲線性表中第一個數(shù)據(jù)元素的結(jié)點(diǎn)。若單鏈表中附設(shè)頭結(jié)點(diǎn),則不管線性表是否為空,頭指針均不為空,否則表示空表的鏈表的頭指針為空。2.2 簡述線性表的兩種存儲結(jié)構(gòu)有哪些主要優(yōu)缺點(diǎn)及各自使用的場合。解:順序存儲是按索引直接存儲數(shù)據(jù)元素,方便靈活,效率高,但插入、刪除操作將引起元素移動,降低了效率;而鏈?zhǔn)酱鎯Φ脑卮鎯Σ捎脛討B(tài)分配,利用率高,但須增設(shè)表示結(jié)點(diǎn)之間有序關(guān)系的指針域,存取數(shù)據(jù)元素不如
2、順序存儲方便,但結(jié)點(diǎn)的插入和刪除十分簡單。順序存儲適用于線性表中元素?cái)?shù)量基本穩(wěn)定,且很少進(jìn)行插入和刪除,但要求以最快的速度存取線性表中的元素的情況;而鏈?zhǔn)酱鎯m用于頻繁進(jìn)行元素動態(tài)插入或刪除操作的場合。2.3 在頭結(jié)點(diǎn)為h的單鏈表中,把值為 b的結(jié)點(diǎn)s插入到值為a的結(jié)點(diǎn)之前,若不存在 a, 就把結(jié)點(diǎn)s插入到表尾。Void insert(Lnode *h,int a,int b)Lnode * p,*q,*s;s=(Lnode*)malloc(sizeof(Lnode);s->data=b;p=h->next;while(p->data!=a&&p->ne
3、xt!=NULL)q=p;p=p->next; if (p->data=a)q->next=s;s->next=p;elsep->next=s;s->next=NULL; 2.4 設(shè)計(jì)一個算法將一個帶頭結(jié)點(diǎn)的單鏈表A分解成兩個帶頭結(jié)點(diǎn)的單鏈表A和B,使A中含有原鏈表中序號為奇數(shù)的元素,而 B中含有原鏈表中序號為偶數(shù)的元素,并且保持元 素原有的相對順序。Lnode *cf(Lnode *ha)Lnode * p,*q,*s,*hb;int t;p=ha->next;q=ha;t=0;hb=(Lnode*)malloc(sizeof(Lnode);s=hb
4、;while(p->next!=NULL)if (t=0)q=p;p=p->next;t=1;elseq->next=p->next;p->next=s->next; s->next=p; s=p;p=p->next; t=0;s->next=NULL;return (hb);2.5 設(shè)線性表中的數(shù)據(jù)元素是按值非遞減有序排列的,試以不同的存儲結(jié)構(gòu),編寫一算法,將x插入到線性表的適當(dāng)位置上,以保持線性表的有序性。順序表;解:本題的算法思想是:先找到適當(dāng)?shù)奈恢?,然后后移元素空出一個位置,再將x插入,并返回向量的新長度。實(shí)現(xiàn)本題功能的函數(shù)如下:i
5、nt insert(vector A , int n , ElemType x) /*向量 A 的長度為 n*/ inti , j;*/if (x>=An-1) An=x/*若x大于最后的元素,則將其插入到最后 elsei=0 ;while (x>=Ai) i+ ;/* 查找插入位置 i*/for (j=n-1 ; j>=i ; j-) Aj+1=Aj ;/* 移出插入 x 的位置 */Ai=x ;n+ ;/*將x插入,向量長度增1*/return n;單鏈表。解:本題算法的思想是先建立一個待插入的結(jié)點(diǎn),然后依次與鏈表中的各結(jié)點(diǎn)的數(shù)據(jù)域比較大小,找到插入該結(jié)點(diǎn)的位置,最后插入
6、該結(jié)點(diǎn)。實(shí)現(xiàn)本題功能的函數(shù)如下:node *insertorder(head , x)node *head; ElemType x;node *s , *p, *q;s=(node *)malloc(sizeof(node); /* 建立一個待插入的結(jié)點(diǎn) */s->data=x;s->next=NULL;if (head=NULL | x<head->data)/*若單鏈表為空或x小于第一個結(jié)點(diǎn)的date 域*/s->next=head;/*則把s結(jié)點(diǎn)插入到表頭后面*/head=s; else q=head;/*為s結(jié)點(diǎn)尋找插入位置,p指向待比較的結(jié)點(diǎn),q指向p的
7、前驅(qū)結(jié)點(diǎn)*/p=q->next;while (p!=NULL && x>p->data)/* 若 x 小于 p 所指結(jié)點(diǎn)的 data 域值*/ if (x>p->data)/*則退出 while 循環(huán)*/q=p;p=p->next;s->next=p; /*將s結(jié)點(diǎn)插入到 q和p之間*/ q->next=s;return(head);2.6 假設(shè)有A和B分別表示兩個遞增有序排列的線性表集合(即同一表中元素值各不相同),求A和B的交集C,表C中也依值遞增有序排列。試以不同的存儲結(jié)構(gòu)編寫求得C的算法。順序表;void SqList_I
8、ntersect_True(SqList &A,SqList B)求元素遞增排列的線性表A和B的元素的交集并存回A中i=1;j=1;k=0;while(A.elemi&&B.elemj) if(A.elemi<B.elemj) i+;else if(A.elemi>B.elemj) j+;else if(A.elemi!=A.elemk) A.elem+k=A.elemi;/當(dāng)發(fā)現(xiàn)了一個在 A,B中都存在的元素i+;j+; 且C中沒有,就添加到C中 /whilewhile(A.elemk) A.elemk+=0;SqList_Intersect_True單鏈
9、表。單鏈表chnode *or(chnode *head1,chnode *head2) chnode *p1,*p2,*q2,*h,*p;h=p=malloc(sizeof(chnode);p->next=NULL;p1=head1->next;while(pl) p2=head2;q2=p2->next;while(q2->data!=p1->data)&&q2)p2=q2;q2=q2->next;if(p1->data=q2->data)p2->next=q2->next;if(q2) while(p->n
10、ext)p=p->next;p->next=q2;p=q2;q2->next=NULL;p1=p1->next;return(h);2.7 設(shè)計(jì)一個算法求兩個遞增有序排列的線性表A和B的差集。(每個單鏈表中不存在重復(fù)的元素)提示:即在A中而不在B中的結(jié)點(diǎn)的集合。typedef int elemtype ;typedef struct linknodeelemtype data ;struct linknode *next ; nodetype ;nodetype *subs(nodetype *heada, nodetype *headb)nodetype *p, *q
11、, *r, *s ;s=(nodetype *)malloc(sizeof(nodetype) ;s->next=heada ;heada=s ;p=heada->next ;r=heada ; r->next=NULL ;while (p!=NULL)q=headb ;while (q!=NULL && q->data!=p->data) q=q->next ;if (q!=NULL)s=p->next ;free(p) ; p=s ;elser->next=p ; s=p->next ;r=p; r->next=N
12、ULL ;p=s;s=heada ; heada=heada->next ; free(s);return heada ;2.8 設(shè)有線性表 A=(a1 ,a2,,am ), B=(b 1 ,b2,,bn )。試寫一合并 A、B為線性表C的算法,使得(a1 ,b1,,am ,bm ,bm+1,,bn ) 當(dāng) m 3時C = (a1 ,b1,,an ,bn ,an+1,,am ) 當(dāng) m>n 時A、B和C均以單鏈表作存儲結(jié)構(gòu),且 C表利用A和B中結(jié)點(diǎn)空間。解:假設(shè) A, B和C鏈表分別具有頭結(jié)點(diǎn)的指針a, b和c。實(shí)現(xiàn)本題功能的函數(shù)如下:node *link(a , b)node *
13、a , *b;node *r , *s, *p , *q, *c;c=(node *)malloc(sizeof(node);/*建立一個頭結(jié)點(diǎn) */r=c;p=a;q=b;while (p!=NULL | q!=NULL)if (p!=NULL)/*如果A鏈表還存在可取的結(jié)點(diǎn),則復(fù)制一個同樣的結(jié)點(diǎn)鏈接到C中*/s=(node *)malloc(sizeof(node);s->data=p->data;r->next=s;r=s;p=p->next;if (q!=NULL)/*如果B鏈表還存在可取的結(jié)點(diǎn),則復(fù)制一個同樣的結(jié)點(diǎn)鏈接到C中*/s=(node *)malloc
14、(sizeof(node);s->data=q->data;r->next=s;r=s;q=q->next; r->next=NULL;s=c;c=c->next;/*刪除頭結(jié)點(diǎn)*/free(s);return(c); 2.9 試用兩種線性表的存儲結(jié)構(gòu)來解決約瑟夫問題。設(shè)有 n個人圍坐在圓桌周圍,現(xiàn)從第 s 個人開始報(bào)數(shù),數(shù)到第 m個人出列,然后從出列的下一個人重新開始報(bào)數(shù),數(shù)到第 m個人 又出列,如此重復(fù)直到所有的人全部出列為止。例如當(dāng) n=8,m=4,s=1,得到的新序列為: 4, 8, 5, 2, 1, 3, 7, 6。寫出相應(yīng)的求解算法。解:先構(gòu)造一
15、個循環(huán)鏈表nodetype *crea(int n) nodetype *s,*r,*h;int I;for (i=1;i<=n;i+) s=(nodetype *)malloc(sizeof (nodetype);s->data=I;s->next=NULL;if(i=1) h=s;else r->next=s;r=s;r->next=h;return h;void jese (nodetype *h,int m) nodetype *p=h,*q;int I;while (p->next!=p)for (i=1;i<m-1;i+)p=p->n
16、ext;if (p->next!=p) q=p->next;printf( "%d” ,q->data);p->next=q->next;free(q);p=p->next;printf( "%d” ,p->data);2.10 已知單鏈表中的數(shù)據(jù)元素含有三類字符(即:字母字符、數(shù)字字符和其它字符),試編寫算法構(gòu)造三個環(huán)形鏈表,使每個環(huán)形鏈表中只含同一類的字符,且利用原表中的結(jié)點(diǎn)空間作為這三個表的結(jié)點(diǎn)空間,頭結(jié)點(diǎn)可另辟空間。解:void split (nodetype *ha,nodetype *hb,nodetype *hc) c
17、har c;nodetype *ra,*rb,*rc,*p=ha->next;ra=ha;ra->next=NULL;rb=hb;rb->next=NULL;rc=hc;rc->next=NULL;while (p!=ha) c=p->data;if (c>= ' a' &&c<= ' z' )|(c>= ' A' &&c<= ' Z')ra->next=p;ra=p; else if(c>= ' 0' &&a
18、mp;c<= ' 9')rb->next=p;rb=p;elserc->next=p;rc=p;p=p->next;ra->next=ha;rb->next=hb;rc->next=hc;2.11 假設(shè)有一個循環(huán)鏈表的長度大于1,且表中既無頭結(jié)點(diǎn)也無頭指針。已知 p為指向鏈表中某結(jié)點(diǎn)的指針,試編寫算法在鏈表中刪除結(jié)點(diǎn)p的前趨結(jié)點(diǎn)。解:nodetype *delprev(nodetype *p) nodetype *r=p,*q=r->next;while (q->next!=p)r=r->next;q=r->ne
19、xt;r->next=p;free(q);return(p);2.12假設(shè)有一個單向循環(huán)鏈表,其結(jié)點(diǎn)含三個域:pre、data 和 next,每個結(jié)點(diǎn)的pre值為空指針,試編寫算法將此鏈表改為雙向環(huán)形鏈表。分析:在遍歷單鏈表時,可以利用指針記錄當(dāng)前訪問結(jié)點(diǎn)和其前驅(qū)結(jié)點(diǎn)。知道了當(dāng)前訪問結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)位置,就可以給當(dāng)前訪問結(jié)點(diǎn)的前驅(qū)指針賦值。這樣在遍歷了整個鏈表后,所有結(jié)點(diǎn)的前驅(qū)指針均得到賦值。Typedef struct Inodeelemtype data;struct Inode pre,next;lnode,*linklist;void singletodouble(linklist
20、 h)linklist pre,p;p=h->next;pre=h;while(p!=h)p->pre=pre;pre=p;p=p->next; p->pre=pre;2.13 設(shè)有一個二維數(shù)組 Amn,假設(shè) A0存放位置在 644(10), A22存放位置在 676 (10),每個元素占一個地址空間,求 A33(10)存放在什么位置?分析根據(jù)二維數(shù)組的地址計(jì)算公式:LOC(i,j尸LOC(0,0)+n*i+j*s ,首先要求出數(shù)組第二維的長度,即n值。解因?yàn)?LOC(2 , 2)=LOC(0,0 )+ 2*n+2=644+2*n+2=676所以 n= (676-2-6
21、44 ) /2=15LOC(3,3)=LOC(0,0 )+3*15+3=644+45+3=6922.14 設(shè)稀疏矩陣采用十字鏈表結(jié)構(gòu)表示。試寫出實(shí)現(xiàn)兩個稀疏矩陣相加的算法。解:依題意,C=A+B ,則C中的非零元素cij只可能有3種情況:或者是 aij+bij ,或者是aij(bij=0)或者是bij(aij=0)。因此,當(dāng)B加到A上時,對A矩陣的十字鏈表來說, 或者是改變結(jié)點(diǎn)的val域值(a+b%),或者不變(b=0),或者插入一個新結(jié)點(diǎn)(a=0),還可能是刪除一個結(jié)點(diǎn)(aij+bij=0)。整個運(yùn)算可從矩陣的第一行起逐行進(jìn)行。對每一行都從行表頭 出發(fā)分別找到 A和B在該行中的第一個非零元素
22、結(jié)點(diǎn)后開始比較,然后按4種不同情況分別處理(假設(shè)pa和pb分別指向A和B的十字鏈表中行值相同的兩個結(jié)點(diǎn)):若pa->col=pb->col 且pa->val+pb->val禮,則只要將 aij+bij的值送到 pa 所指結(jié)點(diǎn) 的值域中即可。(2)若 pa->col=pb->col 且pa->val+pb->val=0 ,則需要在 A 矩陣的十字鏈表中刪除pa所指結(jié)點(diǎn),此時需改變同一行中前一結(jié)點(diǎn)的right域值,以及同一列中前一結(jié)點(diǎn)的down域值。(3)若pa->col<pb->col 且pa->col為(即不是表頭結(jié)點(diǎn)),
23、則只需要將pa指針往右推進(jìn)一步,并重新加以比較。(4)若pa->col>pb->col 或pa->col=0 ,則需要在 A 矩陣的十字鏈表中插入一個值為bij的結(jié)點(diǎn)。實(shí)現(xiàn)本題功能的程序如下:#include <stdio.h>#define MAX 100struct matnode *createmat(struct matnode *h)/*h是建立的十字鏈表各行首指針的數(shù)組*/ int m , n, t, s, i, r, c, v;struct matnode *p , *q;printf("行數(shù) m ,列數(shù)n,非零元個數(shù) t:"
24、;);scanf("%d , %d , %d", &m , &n, &t);p=(struct matnode *)malloc(sizeof(struct matnode);h0=p;p->row=m;p->col=n;s=m>n ? m:n;/*s為 m、n中的較大者*/for (i=1;i<=s;i+)p=(struct matnode *)malloc(sizeof(struct matnode);hi=p;hi-1->tag.next=p;p->row=p->col=0;p->down=p-&
25、gt;right=p;hs->tag.next=h0;for (i=1;i<=t;i+)printf("t第%個元素(行號r,列號c,值v):", i);scanf("%d , %d, %d", &r, &c, &v);p=(struct matnode *)malloc(sizeof(struct matnode);p->row=r;p->col=c;p->tag.val=v;q=hr;while (q->right!=hr && q->right->col<
26、c)q=q->right;p->right=q->right;q->right=p;q=hc;while(q->down!=hc && q->down->row<r)q=q->down;p->down=q->down;q->down=p;return(h0);void prmat(struct matnode *hm)struct matnode *p , *q;printf("n按行表輸出矩陣元素:n");printf("row=%d col=%dn" , hm-&
27、gt;row , hm->col);p=hm->tag.next;while (p!=hm)q=p->right;while (p!=q)printf("t%d , %d , %dn" , q->row , q->col , q->tag.val);q=q->right;p=p->tag.next;struct matnode *colpred(i , j, h)/*根據(jù)i(行號)和j(列號)找出矩陣第i行第j列的非零元素在十字鏈表中的前驅(qū)結(jié)點(diǎn)*/int i , j; struct matnode *h口;struct mat
28、node *d;d=hj;while (d->down->col!=0 && d->down->row<i)d=d->down;return(d);struct matnode *addmat(ha , hb , h)struct matnode *ha , *hb , *h口;struct matnode *p , *q , *ca , *cb , *pa , *pb , *qa;if (ha->row!=hb->row | ha->col!=hb->col)printf("兩個矩陣不是同類型的,不能相加n
29、");exit(0);elseca=ha->tag.next;cb=hb->tag.next;dopa=ca->right;pb=cb->right;qa=ca;while (pb->col!=0)if (pa->col<pb->col && pa->col!=0)qa=pa;pa=pa->right;else if (pa->col>pb->col | pa->col=0)p=(struct matnode *)malloc(sizeof(struct matnode);*p=*pb
30、;p->right=pa;qa->right=p;qa=p;q=colpred(p->row ,p->col , h);p->down=q->down;q->down=p;pb=pb->right;精品資料elsepa->tag.val+=pb->tag.val;if (pa->tag.val=0)qa->right=pa->right;q=colpred(pa->row , pa->col , h);q->down=pa->down;free(pa);else qa=pa;pa=pa->
31、;right;pb=pb->right;ca=ca->tag.next;cb=cb->tag.next; while (ca->row=0);return(h0);main() struct matnode *hm , *hm1 , *hm2;struct matnode *hMAX , *h1MAX;printf("第一個矩陣:n");hm1=createmat(h);printf("第二個矩陣:n");hm2=createmat(h1);hm=addmat(hm1 , hm2 , h);prmat(hm);第二章上機(jī)內(nèi)容1 .
32、設(shè)計(jì)一個程序,生成兩個按值非遞減有序排列的線性表LA和LB,再將LA和LB歸并為一個新的線性表 LC,且LC中的數(shù)據(jù)仍按值非遞減有序排列,輸出線性表LA, LB,LC。精品資料解:#includeStdio.h "#includealloc.h "typedef struct nodechar data ;struct node *next ; listnode ;typedef struct node *link;void print(link head)struct node *p;printf ( h");printf ( h");p= head-
33、>next ;while(p)printf ( %c",p->data) ; p = p->next ; link creat()/*頭插法建立單鏈表*/link head ,s ;char ch;head = malloc(sizeof(listnode) ;head->next =NULL ;while( ch= getchar()!='n')s= malloc(sizeof(listnode) ;s->data= ch ;s->next = head->next ;head->next = s ;return he
34、ad ;link merge(link a , link b)link p , q , s , c ;c= malloc(sizeof(listnode) ;c->next =NULL ;P=a ;q=b ;while(p->next&&q->next)if (p->next->data<q->next->data) s = p->next ; p->next=s->next ; else s = q->next ; q->next = s->next ; s->next = c->
35、next ;c->next = s ;while (p->next)s = p->next ;p->next = s->next ;s->next = c->next ;c->next = s ;while(q->next)s = q->next ;q->next = s->next ;s->next = c->next ;c->next = s ;free(p) ; free(q);return c ;main()link a , b , c ;a = creat();b = creat();print
36、(a);print(b);c = merge ( a , b);print(c);printf ( h");輸入:ysplhdzyxrmhb輸出:dhlpsybhmrxyzzyyxsrpmlhhdb2 .生成兩個多項(xiàng)式 PA和PB,求PA和PB之和,輸出“和多項(xiàng)式”。解:typedef struct nodeint exp;float coef;struct node *next;polynode;polynode *p,*q;polynode *polyadd(pa,pb)polynode *pa,*pb;polynode *p,*q,*pre,*r;float x;p=pa-&g
37、t;next;q=pb->next;pre=pa;while (p!=NULL)&&(q!=NULL)if (p->exp>q->exp)r=q->next;q->next=p;pre->next=q;pre=q;q=r;elseif(p->exp=q->exp)x=p->coef+q->coef;if (x!=0)p->coef=x;s=p;elsepre->next=p->next;free(p);p=pre->next;r=p;q=q->next;free(r);elseif
38、(p->exp<q->exp)pre=p;p=p->next;if (q!=NULL)pre->next=q;free(pb);3 .設(shè)計(jì)一個統(tǒng)計(jì)選票的算法,輸出每個候選的得票結(jié)果(假設(shè)采用單鏈表存放選票,候選人編號依次為1, 2, 3,,N,且每張選票選且只選一人)提示:以單鏈表存放選票,每個結(jié)點(diǎn)的 data域存放該選票所選的候選人。用一個數(shù)組a統(tǒng)計(jì)得票結(jié)果。typedef int elemtype ;typedef struct linknodeelemtype data ;struct linknode *next ; nodetype ;nodetype
39、*create()elemtype d ;nodetype h=NULL,* s,*t;int I=1 ;printf ("建立一個單鏈表n);while (1)printf ("輸入第d節(jié)點(diǎn)data域值:”,i);scanf ( " %d" ,&d);if (d= =0) break ;if(I= =1)h=(nodetype *)malloc(sizeof(nodetype)h->data=d ; h->next=NULL ; t=h ;elses=(nodetype *)malloc(sizeof(nodetype) s->
40、;data=d ; s->next=NULL ; t->next=s ;t=s ;I+;return h ;void sat (nodetype *h, int a)nodetype *p=h ;while (p!=NULL)ap->data+ ;p=p->next ;void main()int aN+1, I ;for (I=0 ; I<N ; I+)aI=0 ;nodetype *head ;head=create();sat(head,a);printf ("候選人:”);for (I=1 ; i<=n ; I+) printf( &quo
41、t;3d”,i);printf ( "n 得票數(shù):”);for (I=1 ; I<=N ; I+)printf( “%3d",ai);printf( "n");4.編寫一算法來解決約瑟夫問題。設(shè)有n個人圍坐在圓桌周圍, 現(xiàn)從第s個人開始報(bào)數(shù),數(shù)到第m個人出列,然后從出列的下一個人重新開始報(bào)數(shù),數(shù)到第m個人又出列,,如此重復(fù)直到所有的人全部出列為止。例如當(dāng) n=8,m=4,s=1,得到的新序列為:4 , 8, 5, 2, 1 , 3, 7, 6。解:nodetype *crea(int n) nodetype *s,*r,*h;int I;for (
42、i=1;i<=n;i+) s=(nodetype *)malloc(sizeof (nodetype);s->data=I;s->next=NULL;if(i=1) h=s;else r->next=s;r=s;r->next=h;return h; void jese (nodetype *h,int m) nodetype *p=h,*q;int I;while (p->next!=p)for (i=1;i<m-1;i+)p=p->next;if (p->next!=p) q=p->next;printf( " %d”
43、,q->data);p->next=q->next;free(q);p=p->next;printf( "%dn " ,p->data);void main()int n,k;nodetype *h;scanf( "%d" ,&n);scanf( "%d" ,&m);h=crea(n);jese(h,m);* 5.設(shè)計(jì)一個算法求 A和B兩個單鏈表表示的集合的交集、并集、差集/*設(shè)計(jì)一個算法求 A和B兩個單鏈表表示的集合的交集。*/#define NULL 0typedef int stat
44、us;typedef struct Inodeint data;struct lnode *next;LNode;LNode *creat()LNode *head=NULL,*p1,*p2;int i=1,d;while(1)printf("enter %d data:",i);scanf("%d",&d);if(d=0) break;if(i=1)head=(LNode *)malloc(sizeof(LNode);head->data=d;head->next=NULL;p2=head;elsep1=(LNode *)mallo
45、c(sizeof(LNode);p1->data=d;p1->next=NULL;p2->next=p1;p2=p1;i+;return head;status find(LNode *head,int d)LNode *p=head;while(p!=NULL)if(p->data=d) return 1;p=p->next;return 0;main()LNode *A,*B,*C,*p,*q1,*q2;int i=1;printf("creat A:n");A=creat();printf("creat B:n");B
46、=creat();P=A;printf("the jiaoji'n");while(p!=NULL)if(find(B,p->data)q1=(LNode *)malloc(sizeof(LNode);q1->data=p->data;q1->next=NULL;if(i=1) C=q2=q1;else q2->next=q1;q2=q1;i+;LNode *creat()if(i=1)printf("kongji'n");exit(0);p=C;while(p!=NULL)printf("%d &
47、quot;,p->data);p=p->next;printf("n");getch();/*設(shè)計(jì)一個算法求 A和B兩個單鏈表表示的集合的并集。*/#define NULL 0typedef int status;typedef struct lnodeint data;struct lnode *next;LNode;LNode *head=NULL,*p1,*p2;int i=1;p1=p2=(LNode *)malloc(sizeof(LNode);printf("enter %d data:",i);scanf("%d&qu
48、ot;,&p1->data);while(p1->data!=0)if(i=1) head=p1;else p2->next=p1;p2=p1;i+;printf("enter %d data:",i);p1=(LNode *)malloc(sizeof(LNode);scanf("%d",&p1->data);p2->next=NULL;return head;status find(LNode *head,int d)精品資料LNode *p=head;while(p!=NULL)if(p->dat
49、a=d) return 1;p=p->next;return 0;main()LNode *A,*B,*C,*p,*q1,*q2;int i=1,k=0;printf("creat A:n");A=creat();printf("creat B:n");B=creat();p=A;while(p!=NULL)if(!find(B,p->data)k=1;精品資料q1=(LNode *)malloc(sizeof(LNode);q1->data=p->data;q1->next=NULL;if(i=1) C=q2=q1;els
50、e q2->next=q1;q2=q1;i+;p=p->next;p=B;while(p!=NULL)q1=(LNode *)malloc(sizeof(LNode);q1->data=p->data;q1->next=NULL;if(k=0) C=q2=q1;k=1;else q2->next=q1;q2=q1;p=p->next;printf("the bingji'n");p=C;while(p!=NULL)printf("%d ",p->data);p=p->next;printf(&
51、quot;n");getch();*/*設(shè)計(jì)一個算法求 A和B兩個單鏈表表示的集合的差集#define NULL 0typedef struct Inodeint data;struct lnode *next;*Linklist;Linklist creat()Linklist head,s;int n;head=(Linklist)malloc(sizeof(struct lnode);head->next=NULL;scanf("%d",&n);while(n!=0)s=(Linklist)malloc(sizeof(struct Inode)
52、;s->data=n;s->next=head->next;head->next=s;scanf("%d",&n);return head;void disp(Linklist head)Linklist p=head->next;while(p!=NULL)printf("%d ",p->data);p=p->next;printf("n");int find(int d,Linklist head)Linklist p=head->next;while(p&&
53、p->data!=d) p=p->next;if(!p) return 0;return 1;main()Linklist A,B,C,p,s;C=(Linklist)malloc(sizeof(struct lnode);C->next=NULL;printf("creat A:n");A=creat();printf("creat B:n");B=creat();p=A->next;while(p!=NULL)if(!find(p->data,B)s=(Linklist)malloc(sizeof(struct lnod
54、e); s->data=p->data;s->next=C->next;C->next=s;p=p->next;printf("A:");disp(A);printf("B:");disp(B);printf("C:");disp(C);getch(); 6.稀疏矩陣運(yùn)算器基本要求:以“帶行邏輯鏈接信息”的三元組順序表表示稀疏矩陣,實(shí)現(xiàn)兩個矩陣相加、相減和相乘的運(yùn)算。稀疏矩陣的輸入形式采用三元組表示,而運(yùn)算結(jié)果的矩陣則以通常的陣列形式列出。#define NULL 0#define maxsize
55、100typedef structint i,j,v;jd;typedef structjd datamaxsize;int mu,nu,vu;sh;void dis(sh *B)int x,y,p=1;for(x=1;x<=B->mu;x+)for(y=1;y<=B->nu;y+)if(x=B->datap.i&&y=B->datap.j) printf("%-3d ”,B->datap.v);p+;else printf("%-3d ",0);printf("n");sh *creat()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個人房屋裝修貸款合同模板8篇
- 2025年度城市更新項(xiàng)目土地使用權(quán)收購協(xié)議4篇
- 二零二五版貨運(yùn)車輛租賃合同示范文本(含實(shí)時跟蹤服務(wù))2篇
- 個人房屋建筑施工安全合同2024年度2篇
- 二零二五版虛擬現(xiàn)實(shí)(VR)教育培訓(xùn)服務(wù)合同
- 科學(xué)課堂上的商業(yè)思維啟蒙-小學(xué)案例分享
- 教育信息化與嵌入式技術(shù)的融合路徑
- 二零二五版?zhèn)€人獨(dú)資企業(yè)股權(quán)出售與競業(yè)禁止協(xié)議3篇
- 二零二五年度物業(yè)服務(wù)合同:某大型商場物業(yè)服務(wù)管理協(xié)議6篇
- 安裝購銷合同
- 2024年醫(yī)銷售藥銷售工作總結(jié)
- GB/T 44888-2024政務(wù)服務(wù)大廳智能化建設(shè)指南
- 2023-2024學(xué)年江西省萍鄉(xiāng)市八年級(上)期末物理試卷
- 四則混合運(yùn)算100道題四年級上冊及答案
- 四川省高職單招電氣技術(shù)類《電子基礎(chǔ)》歷年考試真題試題庫(含答案)
- 2024年江西生物科技職業(yè)學(xué)院單招職業(yè)技能測試題庫帶解析答案
- 橋本甲狀腺炎-90天治療方案
- (2024年)安全注射培訓(xùn)課件
- 2024版《建設(shè)工程開工、停工、復(fù)工安全管理臺賬表格(流程圖、申請表、報(bào)審表、考核表、通知單等)》模版
- 酒店人防管理制度
- 油田酸化工藝技術(shù)
評論
0/150
提交評論