数学建模社区-数学中国
标题:
数据结构,清华 严蔚敏,例题代码(自己写的,持续更新中)
[打印本页]
作者:
慢跑20
时间:
2014-3-10 21:34
标题:
数据结构,清华 严蔚敏,例题代码(自己写的,持续更新中)
本帖最后由 慢跑20 于 2014-3-10 21:38 编辑
0 {% f6 Q2 c: K- y5 F
M; ]% g; f& H" X# y
计算机基础课数据结构,清华严蔚敏这本书是公认的一本好书。
$ z5 Y9 I" n' I2 p
刚好这学期我们学习数据结构,想把一些例题的代码写一些、既提高了C语言的水平,又可以加深对数据结构的理解,为以后打下良好的基础。
# X5 D% ?4 `2 }0 Z# j# Z; l4 N7 Z
作者:
慢跑20
时间:
2014-3-10 21:34
本层占楼编辑
7 b# U& d/ `( J8 j
作者:
慢跑20
时间:
2014-3-10 21:35
20页,例2.1 A,B两个集合,合并成C集合。
! @2 ^( V, }: c& w4 U
这个代码是用数组的、算是比较简单的。
* T) Z) f: b. h2 q q; Y
" O9 [1 m5 h |/ g+ m0 f# C0 t
#include<stdio.h>
3 H% p6 w0 p$ \/ V
int L_length(char []);
7 }% V0 t" t$ w' D# V. J( f
int main(){
7 _+ U7 D- [$ k5 \9 W2 f
void Union(char [],char [],char []);
0 ~6 O. D3 E6 N! P+ p% `! Q( e
@) Q9 T! h3 r7 B( P( ]* k
char a[10];
- J! O9 h a4 D0 N, W
char b[10];
7 j( q9 H2 Q- r
char c[20];
6 Y O- e1 w9 O2 r
gets(a);
, p5 j# S/ \8 e* ]3 M
printf("输入的集合A是\n");
1 t$ G& m; h/ y% ^' i
puts(a);
9 r, t3 t. X8 p" I
8 |6 J: u+ r4 N/ t
gets(b);
8 {; B4 c3 |9 V# B n
printf("输入的集合B是\n");
; p( f- G' t0 Q- o1 f
puts(b);
' ]6 Q- V6 {" }
: H4 a& g, M- x
Union( a, b, c);
+ {6 o+ n3 L2 e% f
printf("last得到集合C是\n");
9 z% Y0 d3 F# Y! A! A, k
puts(c);
* O9 W" Y, {# z$ K/ J
return 0;
/ @+ e/ V' ^: E' G6 @" l( g5 b
}
( [6 W0 Z' [7 A% I- e
9 A7 R/ l' t) W- j$ E% s
void Union(char a[],char b[],char c[])
( M9 p2 ?" @& [( D" v
{
: r* g* N& i3 A+ e, {& |3 u# C
int flag=1,t=0,i,j,m,n;
* o4 Z( l5 W" ]$ ~/ Q; R
m=L_length(b);
& L: U M7 n/ @9 h+ ]' _% d! ^
n=L_length(a);
" j2 y) D. E) Q& j
for(j=0;j<n;j++)
0 D' p% j0 A* i4 L
c[j]=a[j];
& I2 D3 g7 z( l% C- p8 m
for(i=0;i<m;i++,flag=1) //i为b数组的下标,m为数组个数; j为a数组的下标,n为数组个数;
: ?# @% [. f1 t7 R2 K* j6 a
{for(j=0;j<n;j++)
) S8 l' K3 U5 Q
if(b[i]==a[j]) flag=0;//flag=0,说明有重复的了
! r4 J6 l+ O. i; ^1 x, `8 s
if(flag) { c[n+t]=b[i];t++ ;}
5 j0 i6 e" g) x4 h- V+ }
}
* X ^2 ]/ ^& f+ N0 [- q T; g' i
c[n+t]='\0';
+ Z, W( U3 p5 b8 h. u
* |9 d! l5 g0 l& v, N; c6 y
}
1 r9 P9 h% [- G
. }# U T/ Y. `, \% l$ `: U
int L_length(char a[])
* r f4 z# j, a! B" {
{
) D# l2 ]- f1 L9 S7 H2 T; H% k( d
int i,t=0;;
5 s) e. I9 l7 q/ z* }3 ^
for(i=0; a[i]!='\0';i++ )
6 S6 `3 G4 r! `2 [% z
t++;
! i2 ]4 t+ Z/ D, u
return t;
- H/ u1 t$ p8 |+ _
}
/ K- M+ X. z* Z0 D S
: p. |" ^" d1 k$ S& A* }7 [
作者:
慢跑20
时间:
2014-3-14 09:32
本帖最后由 慢跑20 于 2014-3-19 13:53 编辑
1 _& t3 |$ L. O: k" g6 W E
+ p2 X6 Y x/ N* @& s- s. G
li2.1yong用指针:
w$ f0 F. P9 S6 o& n2 ?- m8 V
# \2 C2 _: o+ c: I: L
#include "stdio.h"
$ M+ d- O$ l: V5 K
#include "string.h"
9 N* ]3 E8 f1 K2 W5 h
void Union(char *a,char *b,char *c)
7 U2 k! J# [1 y0 z7 L% t' Q
{
* X$ S' R# K2 u/ b. s( a
char *p=a;
/ O: a7 \( E }+ n7 r# I- y4 S
char *q=b;
9 q: W5 F( X( K# K i
char *r=c;
) b' X9 B( ?/ a% U' x' g9 P v
while(*p) *r++=*p++;
) ^3 Q |7 i- O U1 ]
p=a;
& p$ o7 k. N1 Z0 l( E
for( ;*q!=0 ; q++,p=a )
! X' t3 \1 u% `) F
{while(*p)
8 z) Y; V3 `% g+ \% M1 I8 h
if(*q==*p){q++;p=a;}
; k- k, }% P% p3 u4 \
else p++;
: U, x6 A+ [$ y4 ~( C& q4 v
*r=*q;
2 F( B0 ^0 t% O, v& X, w* a" ~# y7 N9 K
r++;
2 a2 N' r1 t$ }& P
}
6 G1 D4 h/ a# G( ~* x- z3 \4 F
*r=0;
" p1 R2 g! R; Y3 \
& y0 A0 l; k0 H- m
}
4 |( y) L) C* A( ~4 B2 ?
) T- e0 h6 A5 ]7 [( h. f
int main(){
9 V/ O! `8 c" Z# H4 B1 h/ {' d
, K% Z! v& D" ^$ k* b- y
char a[10];
: {6 j, e. I+ L& p1 i3 t- c+ P
char b[10];
, A8 G$ H4 ~$ Z! p# i0 b: g
char c[20];
' M6 y5 D! ^% k# c
gets(a);
$ U) c: d. ?! P: E% `7 c
printf("输入的集合A是\n");
( V# b$ G( E$ e' k0 b- D
puts(a);
( Z6 Q: P5 K) n: w; Z9 W( B* y
# N9 A9 F) D+ }' G5 O3 ?$ K0 J* a f
gets(b);
# m* R% b4 M$ F& Q- G: D% o
printf("输入的集合B是\n");
3 f! F% S( e8 A! k
puts(b);
8 D" p% |& _+ o3 P4 R2 @
, J8 ]9 g, d9 v
Union(a,b,c);
1 }! H, X; u1 W7 Y+ x
printf("last得到集合C是\n");
" r2 I4 g% y) g
puts(c);
5 R+ o& I5 s9 v1 T+ s1 d
return 0;
9 g2 I- A! m( g5 [' _
}
+ e( {% n* c! \0 v! q* Q1 z
作者:
慢跑20
时间:
2014-3-14 09:33
第2章最后开始用链表了,由于以前没有接触。这里要重新学习链表:
d% P. |. r6 V" {6 S
#include<stdio.h>
! I. u$ Q4 X7 e: J+ J6 f# C
$ i( y: q! w6 Y3 ^
struct node
+ n3 w3 r% U' H8 T% K/ w9 y
{
4 z. j, ]9 \6 A( H) ~
int data;
4 x, B/ v9 W4 c
struct node *next;
z5 P& \. M1 M1 }! J; O
};
; _( G- W- h' u, J; Y( e
//typedef struct node NODETYPE;
8 ^6 b$ f1 e. g. O4 `- K/ C
void main()
5 f% j" Z3 R. X/ G! k" H) ~
{
( }1 W& w: `4 @4 G1 E2 a' T
//NODETYPE
# p; U6 ]7 {9 l; D
node a,b,c,*h,*p;
3 m- c+ u" @0 I- A! n
a.data=10;b.data=20;c.data=30;
; L7 a! r; b' |
h=&a;
& P/ `* z' Q- F5 V
a.next=&b;b.next=&c;c.next='\0';
N2 c. Q, B* N0 D2 }/ c
p=h;
5 P% P ?- m3 J" ~; T8 v- w8 K
while(p)
/ b% y$ a2 S4 `# l* ?1 P
{
8 U6 } R" [: w' ]( c
printf("%d ",p->data);
& D* e2 K9 z$ W6 ?. t. T7 G+ D; L3 e
p=p->next;
& e: Z9 M: ]3 m
}
_( U0 X+ N, G6 i }
printf("\n");
& P( s5 J3 U& q2 `; g
}
! x6 |# Y% Z4 y
Q. I5 K- x. m1 p& @3 }
这是一个简单的链表。从这里可以了解规则
作者:
慢跑20
时间:
2014-3-14 09:38
此代码为生成一个链表的代码:
9 \) \* e) I& _: w E% ^' _
#include<stdio.h>
2 u+ j8 }) W% _% }, f0 {9 s
#include<stdlib.h>
+ w' }) p( i4 G v1 C8 K& Z
struct slist
: V" n. J- k7 k. F$ U; s
{
# i* W: F) N' U8 p& `, f) l( m
int data;
( O( T) s/ j- _! w' o" `
struct slist *next;
- S9 [; v5 H9 f' C& i0 b% Z
};
* z; b2 A1 E1 \+ K
typedef struct slist SLIST;
$ ?1 p- F [/ y6 f- e9 f1 J
SLIST *creat_slist1()
: d- q6 N5 T% G" p
{
/ q: y" x1 \% m" z. `6 \
int c;
/ n7 @; r! h3 T) @$ \& k
SLIST *h,*s,*r;
' |4 K2 s2 ?3 O! o7 }8 z
h=(SLIST *)malloc (sizeof(SLIST) ); //生成头结点
/ x7 U7 F0 h+ r( C9 a6 d f
r=h;
0 c5 m7 K* v7 l0 v; R# T& e3 q& L9 I
scanf("%d",&c);
+ j, s9 H9 }. H" M9 b; F: @* O
while (c!=-1) //当输入的c为-1时,代表输入结束
: E# L7 o5 P) n. q3 k
{
8 z0 r: K3 E) X4 m c
s=(SLIST *)malloc(sizeof(SLIST) ); //生成一个新结点
5 h0 Y- z3 K, X) s! R8 [2 \
s->data=c;
& k( ^1 M7 F/ v/ H3 r
r->next=s;
& \, Q% g$ U7 O7 p9 S# Y. I
r=s;
) S( U7 D: T" m
scanf("%d",&c);
+ h2 F2 t- o4 A9 k; F# ?0 J$ p+ s6 G
' f- [, T A+ a c; s' n- R- l, x1 E
}
X# V2 f6 i+ T) C. s, F9 W
r->next ='\0';
( ]. ]( U J) [2 X
return h;
6 p7 f8 H- P$ s3 G! I( e! M
}
& c7 \# I ]+ A1 ]
+ ~$ f# }8 F3 g: N3 \7 {
/*
1 p `* A. r' p( f4 Z. m: A4 A7 L7 w
printf_list(&head)
2 ~" d# I2 Y/ e- q2 b1 Q' q
{ SLIST *h,*s,*r;
7 M( r0 F7 M! x+ w' e
int c;
. b4 U1 k3 a) Y
h=(SLIST *)malloc (sizeof(SLIST) );
5 H3 Y" I" n9 P. x; A% r( U
r=h;
7 ?( D& K3 d2 s+ m+ l
s->data=c;
9 }$ [9 p- W- {: K% T- }6 C6 |! d
//scanf("%d",&c);
5 L1 t% o+ v/ p# F {4 L
while (c!=-1)
: R8 Z5 F( f# w- S6 _1 a
{
& w9 U% n6 J0 _5 q1 I9 ^, x* J
printf("%d",c);
7 a2 D6 R2 x8 e
s=(SLIST *)malloc(sizeof(SLIST) );
0 j& ~( t* }7 a% E
s->data=c;
P' T9 o6 V. ?0 y
r->next=s;
. e2 V- ` O! o% A# J; y
r=s;
/ I! v" H2 g5 l5 ?
* n# `8 m+ {- B& f/ i5 u
3 @% ~. t" G8 W/ I
}
8 a4 ~4 m6 S* j8 F
r->next ='\0';
( P" c/ w- E5 }* K
return h;
: o) z. `% Z. h4 Q! ^$ y
}
0 Y$ H" \ @9 b
*/
& ? p x4 e0 y w
void main()
q4 S- V$ b" X" X, ]7 L& {& o
{ SLIST *head;
5 c7 p3 L2 v; {$ H
5 c0 A' y6 Z4 x! u( c( @, }
head=creat_slist1(); //调用链表建立函数,得到头结点地址
+ o/ ]! s7 W. Y7 c2 v' Y6 V
printf_list(head)
# H% T+ b2 ^8 K# {% f% y7 m$ Q
}
5 u- \) _! ]! |1 ^* k, e$ |- P+ p
作者:
慢跑20
时间:
2014-3-19 13:54
2。4节需要用链表计算多项式的加法,因此,熟悉结构体是非常必要的。
0 c1 F7 F* b( l/ M8 ?" V, B: h% A2 J
+ T4 b2 _8 o4 E/ f
#include<stdio.h>
1 f+ I3 }9 B9 o1 ~$ i
#include<stdlib.h>
# D9 l/ Z+ b4 M2 @" I8 w
( ~/ s2 q0 w' j D- ~1 d# y) u; i
struct slist
8 ]1 Q% B% u/ F$ Z8 ?' D9 P- U
{
7 B6 i7 G$ y; z( S# E0 m
int data;
/ U: x# c/ X" _& E- t, Z
struct slist *next;
' s4 T3 T Y/ q6 i: E \- I
};
- c! g: [ O2 i# C2 o* i( y' Y! ]
typedef struct slist SLIST;
3 Z- L9 n7 }4 Q5 k
# D& K) Z, `0 B
SLIST *creat_slist1()
! R* Z. Q& p' t" b; p, X
{
0 S. D; y; F+ J8 Z1 l3 m1 s
int c;
+ A5 \( E% E5 d0 [8 m
SLIST *h,*s,*r;
% c; L7 D0 j8 o' U* S+ k4 ?+ P
h=(SLIST *)malloc (sizeof(SLIST) ); //生成头结点
% B6 [! C% n; w& X" H
r=h;
) M( q6 I, p3 \/ S
scanf("%d",&c);
6 p; E+ F* ~- }
while (c!=-1) //当输入的c为-1时,代表输入结束
* f. u( X& l" K! G( Z- b* g( m
{
5 v' D+ O+ q D% J9 K6 v/ P
s=(SLIST *)malloc(sizeof(SLIST) ); //生成一个新结点
/ M( d' O' s- k# O$ n4 U
s->data=c;
; g j/ \3 G5 {/ p Z# h2 {! H
r->next=s;
7 o$ X9 h& F) ~+ y# }& S8 K
r=s;
$ T9 j" @3 A! X
scanf("%d",&c);
& h4 Y4 r2 ~, v# O; |! i
' m5 @/ v- L9 N+ g: l2 t. q$ v' O4 |
}
' I, l8 S* |! ]9 z/ h
r->next ='\0';
) x. _1 c+ [/ T( O$ ^7 t" H! }$ n
return h;
+ \) Y/ T% H+ w g; B, l. ]! c
}
' I4 _/ v! c9 g+ j( R+ E0 e9 @9 f+ w
7 }, G( E- O4 d# B" d0 I
/**/ //想加入一个函数,在刚才输入链表各个数值之后,再输出这些值。如何写呢?
$ P3 `6 ^* O! L& y9 P
int printf_list(SLIST *h)
- `. i. k I% B4 w
{
. { ]2 F: w0 v( {" k4 M: V
//while (!h->next )//教材上经常使用这个语句作为h->next是否为空指针的判断语句,但在VC++里边,这一句与下边一句效果不同,具体原因还不清楚
; B/ y3 l" I# g+ b# o( x( H9 V
while (h->next!=0 )
) r. d+ D9 ~/ w- _' x: H( e; L
{
- F# @* d6 p- c3 n+ l3 \1 P
printf("%d\n",h->next->data );
' ~% m- A% E1 A4 t; G. L
h=h->next ;
* b0 A+ E# p. z, R) g* o2 j+ p5 T, z
}
) M, z' ]4 ?' {! `% D ?6 q f- H# ^
return 1;
9 _- X' y. O9 ? r+ P2 v. ?
}
& A& M" `- `* B3 H
/**/
1 U; B. v2 _5 X
void main()
3 Y; Y8 q% H$ m9 G- |8 p5 n
{ SLIST *head;
: z2 C, O- X5 b( p/ ]; r
9 r$ d, g, Y+ ]$ k, V$ {9 Y/ o
head=creat_slist1(); //调用链表建立函数,得到头结点地址
" e- a9 @- e* W/ N
printf_list(head);
* k1 z6 Y( b6 P9 K1 _( j& P4 N
}
2 H' B s' `. R+ A& T+ e' h
/ d" Y0 a+ E3 F2 N9 F7 j2 R: K0 y
* h" A% P M8 S2 P7 _
此函数功能为:输入链表中的数,然后依次输出。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5