数学建模社区-数学中国
标题:
数据结构,清华 严蔚敏,例题代码(自己写的,持续更新中)
[打印本页]
作者:
慢跑20
时间:
2014-3-10 21:34
标题:
数据结构,清华 严蔚敏,例题代码(自己写的,持续更新中)
本帖最后由 慢跑20 于 2014-3-10 21:38 编辑
9 h [8 X3 ^0 M( m( p4 O
( v( @; S* o2 g" E# p% l- }
计算机基础课数据结构,清华严蔚敏这本书是公认的一本好书。
# _- I9 Y' Q8 z. y/ M7 A7 J
刚好这学期我们学习数据结构,想把一些例题的代码写一些、既提高了C语言的水平,又可以加深对数据结构的理解,为以后打下良好的基础。
5 w/ s; e8 B' C5 p* g$ Y: r
作者:
慢跑20
时间:
2014-3-10 21:34
本层占楼编辑
. F5 X' @1 l, m9 L
作者:
慢跑20
时间:
2014-3-10 21:35
20页,例2.1 A,B两个集合,合并成C集合。
7 D( f( ^6 J! W2 ?1 q; C
这个代码是用数组的、算是比较简单的。
, X9 D# Z' |" U2 p( l' N4 A3 e6 Z9 L" V
2 l" L" n2 E3 j9 A! a
#include<stdio.h>
1 U# x, ~4 b, o. w. x( G; D
int L_length(char []);
# I0 C4 f# T$ h# m
int main(){
+ t2 z# U& ?& S" Z' [; x
void Union(char [],char [],char []);
0 r8 v3 K1 X! k9 @1 d5 R, K7 m7 t
/ o x( Q9 H2 v5 P$ }
char a[10];
/ H' p/ [* l# V2 ~, r3 p' f5 l
char b[10];
4 P. A$ k, |" d+ E$ p$ g
char c[20];
% u! e6 H" R/ Z% W5 m" P: s
gets(a);
$ A# v) f2 S0 @. p
printf("输入的集合A是\n");
2 D( f) q4 f$ @% r2 ^
puts(a);
7 b& @1 ]- O# Y) E m4 c8 L9 g7 `$ a2 E
S, t1 }5 U. Y8 ?7 T6 z
gets(b);
. [7 x6 M) d& j! K' w( y
printf("输入的集合B是\n");
2 m @) x3 J/ O3 O
puts(b);
/ K: C; g) S7 K8 Q# H
% T8 k3 }6 {( f( J! o
Union( a, b, c);
' H9 C. ^! K1 R) ?. x& g
printf("last得到集合C是\n");
% e/ |0 V! g3 w" z# Q) V; d
puts(c);
( O1 z* z' A& O
return 0;
( D6 [* G/ a! n$ s
}
* L& }1 L: V7 d' O( A( z# U# @1 E
+ \$ x; j% d% w( w4 ] }1 M7 {, y, b
void Union(char a[],char b[],char c[])
) S8 d; t `& O; U) m& ~' u V
{
7 H/ \1 T# R% b2 L
int flag=1,t=0,i,j,m,n;
7 G0 V) e! S0 L8 r
m=L_length(b);
: ]9 a& N1 Q, a
n=L_length(a);
7 l* W) R S4 e4 E' D
for(j=0;j<n;j++)
6 p- R3 u% u- C
c[j]=a[j];
) b% l& b" d/ { w* z7 {" }
for(i=0;i<m;i++,flag=1) //i为b数组的下标,m为数组个数; j为a数组的下标,n为数组个数;
5 U# _" H/ g2 ~3 `
{for(j=0;j<n;j++)
$ d) o3 W. W, s) `* A2 J4 @
if(b[i]==a[j]) flag=0;//flag=0,说明有重复的了
; W% C& M7 O) f* n4 G$ q. B
if(flag) { c[n+t]=b[i];t++ ;}
; V T* l' ^% E9 z2 p
}
6 |+ G" B5 W1 K" J
c[n+t]='\0';
( r* z; ]6 T" f: j F! E3 P
( q. i3 y3 \: K* ^' i6 i7 Q0 F9 c: D$ V
}
4 R1 e) q5 ?, _
- [7 E0 Q. c/ H1 ^7 N; A
int L_length(char a[])
! M& ?( k v4 ~1 e3 n# }& I
{
- ~ }& c5 o' B! q/ H/ U
int i,t=0;;
/ E5 J5 ? o+ f3 h( V$ `5 Q! z
for(i=0; a[i]!='\0';i++ )
: [# w1 W5 y2 h: q# a2 @7 l: h7 ^
t++;
9 Z7 [; S" Y$ h" }' y K% }& X; S
return t;
# ?) j$ D. B* Z0 E, O/ e0 J
}
- @: r0 C- ?3 H/ N$ k. e! M7 @
* J; j% a& J% b9 f
作者:
慢跑20
时间:
2014-3-14 09:32
本帖最后由 慢跑20 于 2014-3-19 13:53 编辑
/ f' |' w) Q" ~7 u8 w! g
- U L" U/ Y7 o4 n E9 w" R
li2.1yong用指针:
( {8 H& O7 B0 g0 E! _% H
6 ^* p) H2 l$ @& D1 g. P. p
#include "stdio.h"
+ C* P* x# z ]" b* z
#include "string.h"
% A# }1 f; X- R9 I0 F s2 b
void Union(char *a,char *b,char *c)
5 N2 Q1 t9 [- h1 h' L
{
) Q1 N! S2 _4 |% ~. u6 ]# ?: _: c/ H
char *p=a;
; ~) u( d5 Y6 C0 O. x# K% m; ^ r! P
char *q=b;
2 w3 L6 J- l0 G: n& A+ ]; {
char *r=c;
. c# p8 T' P9 \2 j5 \
while(*p) *r++=*p++;
* s5 A7 I3 e9 L6 Z- K$ d3 }
p=a;
) Z- R" U2 s5 l1 V9 N/ C6 Z
for( ;*q!=0 ; q++,p=a )
! \/ |9 c) p2 k" S8 k
{while(*p)
3 B- ~' ~1 a0 L& e) M$ a
if(*q==*p){q++;p=a;}
4 u7 y/ S% i5 n3 n# _
else p++;
) u- [" \1 N) @, E1 n
*r=*q;
/ ]- F+ s. f$ k; {" T. I
r++;
@4 ^) D& j! I7 Z8 V. P
}
1 p- _, w: N: H8 E. l: ~: j
*r=0;
; {6 c2 x s$ T+ S' b3 z
/ N" W2 k2 l6 n7 H' _/ r l7 C, H, A
}
" L4 U" R5 t( Y# Q- F0 z+ e/ f+ `
% j/ h: ^( K0 D. }0 ^
int main(){
, u$ k" ]8 A' z, B+ ~
5 ?: k! o, v) h: O8 e n) A
char a[10];
; n- I5 \( p P* X
char b[10];
" q; f& _7 _% P, c. x
char c[20];
* Y# |: K9 ~+ |; V
gets(a);
2 ]5 }% [4 h' l* k% J& j
printf("输入的集合A是\n");
a0 h% A1 O. k3 c, }" Y
puts(a);
1 x. Q. s0 E" o
5 j* p2 E$ |" c7 R4 A
gets(b);
. O7 g$ z2 D" N+ o+ D0 I8 H5 P
printf("输入的集合B是\n");
4 A# g `' t; c0 Y# _5 f
puts(b);
% P; V: E# C! a( a# `- h+ r# Q" N/ K
$ E5 q; x" U/ f7 g5 T' z
Union(a,b,c);
8 `4 v" b' F/ @1 }& F
printf("last得到集合C是\n");
$ d9 c5 o6 ^% u
puts(c);
- L5 [" W* k; V+ r4 B
return 0;
9 J2 j9 @3 ]$ o' q7 w
}
& [2 V' B- \: @& ]/ N A% o
作者:
慢跑20
时间:
2014-3-14 09:33
第2章最后开始用链表了,由于以前没有接触。这里要重新学习链表:
( ^0 Z8 w" r. X
#include<stdio.h>
7 h8 {4 M& Q' X# j8 E/ Q
/ v) o; y% z3 V/ B
struct node
/ H5 Y) E( N# o# E! E
{
U5 g8 _6 W4 k1 N( |+ e7 y% `
int data;
0 Z) k9 y9 i; j) w( W- ~4 v
struct node *next;
, \: E2 c1 i9 j& g+ W# _ Z
};
3 A7 r' P, b+ r
//typedef struct node NODETYPE;
" n0 ]( L d; i) [, A
void main()
, `+ W/ }: G0 ]
{
. Z7 O; |3 |+ Y$ P" x( t# x
//NODETYPE
3 Z% _0 B+ ?+ z7 @9 Z
node a,b,c,*h,*p;
8 \- J% [# G6 T" Z
a.data=10;b.data=20;c.data=30;
+ P# o# \7 J3 u p4 v& ^. w
h=&a;
1 h) d( T5 t0 r6 Y, ]
a.next=&b;b.next=&c;c.next='\0';
% f3 x( K9 S0 {1 A- x0 B% v
p=h;
. i7 [/ f0 _( M
while(p)
7 E7 B: r; F& s: \
{
5 @; K \( }6 n; K7 O q( ^
printf("%d ",p->data);
1 ^* Z! V% d* {* B4 l
p=p->next;
3 |5 S0 e' c) e( E
}
$ }/ m. T' J, ~! Y$ u0 u6 \9 K2 w
printf("\n");
8 J ~. f4 E5 u; h) F6 R- D4 x/ ?
}
& {6 c2 H9 M! i1 h
" z4 [+ M. q& s/ @* h; i
这是一个简单的链表。从这里可以了解规则
作者:
慢跑20
时间:
2014-3-14 09:38
此代码为生成一个链表的代码:
% Y( c6 h7 T7 W) P+ k+ E
#include<stdio.h>
& V4 H! a ?8 ^ G& F4 F
#include<stdlib.h>
. h" m& `9 ?; ^# q/ j# I
struct slist
P. Y6 G+ N( s }
{
7 ~5 o( n& J. F2 y: o! L7 i( n5 t
int data;
; G% T3 J' Z( B$ w0 z! L
struct slist *next;
/ L1 @& U; r/ L
};
: q5 G. E, v2 q- A* D- R$ Q
typedef struct slist SLIST;
4 e% g4 U7 Z/ c4 j
SLIST *creat_slist1()
6 g9 k) B/ N( S0 M: c4 Y5 C
{
' t( y: E& s( |0 y P
int c;
0 k6 }0 t7 }! y6 R
SLIST *h,*s,*r;
+ X0 k* ~/ e' A- f; F% f) _
h=(SLIST *)malloc (sizeof(SLIST) ); //生成头结点
* k- `3 F& r" |5 T( a; O
r=h;
4 a4 `7 y" | [) a
scanf("%d",&c);
' S5 u/ \& u1 R: t* L" ^
while (c!=-1) //当输入的c为-1时,代表输入结束
& N8 s' R& z) K% n& k/ K
{
" N6 F* v& D. m( @. U: D0 @
s=(SLIST *)malloc(sizeof(SLIST) ); //生成一个新结点
# ?7 A: _7 w( ?. E' l( `
s->data=c;
* g5 z7 p3 |# g0 R" S
r->next=s;
( `1 X, ]3 ~1 O v% O8 h
r=s;
) u( E5 q6 J; n
scanf("%d",&c);
5 \% T" G: z g
! m, @* W: i' P2 [/ r& Q% ]
}
; D3 f. D9 P0 w
r->next ='\0';
: F6 p$ `3 d6 e+ E* l
return h;
' m$ ?, {3 C/ M& t# d/ N
}
5 ~8 H( ?1 L4 b: {! B& K
6 j. K' ?" ~0 w7 s' x6 K
/*
. a& r9 `5 W# {$ a1 A. w6 K
printf_list(&head)
8 ?6 m' }( s8 _* n& k+ y- P) Z
{ SLIST *h,*s,*r;
4 W+ z2 S; G/ D( k" ~ @; ]
int c;
% q/ d& W( S+ v9 P
h=(SLIST *)malloc (sizeof(SLIST) );
2 S. k. G. J& y8 ?3 T
r=h;
9 e. p* p! |; [( \ P
s->data=c;
! H% w1 Y8 E: ]0 w3 D2 i
//scanf("%d",&c);
7 D' {8 h( \, g
while (c!=-1)
0 ?. e2 v6 P* I$ Z9 _% u t
{
$ u3 F/ E7 L4 _
printf("%d",c);
: q- |9 o. f# f9 q
s=(SLIST *)malloc(sizeof(SLIST) );
" ]- O, S8 {$ C: d/ c W4 E9 E# r
s->data=c;
9 i, Q% J' P' s# U% o1 X) ]) u
r->next=s;
% h. S, o+ S! x7 z
r=s;
) T+ e+ \" x- Z; N Q: q
# o7 |, M9 p+ W' F: i8 M7 X
! E6 j" R8 n5 c' ^( S( D" L3 v
}
Y3 K5 I) x- v* ]7 C" o
r->next ='\0';
! b, B3 [$ M9 N+ V6 B j7 I
return h;
G1 h1 _( D/ s" Y6 l
}
. t& Z5 O. |! I$ p
*/
4 k5 Y' p- e0 D' R+ @" H. _9 r8 n
void main()
! B2 v6 ^/ T* w8 a4 b/ o" \, r
{ SLIST *head;
( Q6 v: Z0 V9 j, p- O- W1 c
! v, y$ n) F, V
head=creat_slist1(); //调用链表建立函数,得到头结点地址
. \0 f5 D1 e- S A9 N
printf_list(head)
4 x. H: x/ l* L& {2 s6 ?3 n
}
1 s# E9 d3 u5 A
作者:
慢跑20
时间:
2014-3-19 13:54
2。4节需要用链表计算多项式的加法,因此,熟悉结构体是非常必要的。
1 b6 h0 F) [/ B- X; q7 f
) d% c& W8 g# Z6 d+ a
#include<stdio.h>
" m/ W* N" A9 O4 N( G5 f4 z0 s
#include<stdlib.h>
1 |/ H" ?; w0 y& @8 t5 a8 |* ~- ~
% H& C' |0 D3 N7 j
struct slist
* j; V/ g: A' [: E& v7 G
{
6 S, Y1 ^1 }+ v, \ P# |
int data;
! Q) X8 }# s* k8 ^. |. {+ S
struct slist *next;
/ V: J5 T9 l! Z2 E
};
- U- I9 ^. V5 l8 V$ ~: i, r
typedef struct slist SLIST;
& `# o# X6 R4 Y. q
6 N. _& D' ~" @. b; Q
SLIST *creat_slist1()
# [1 Q N# r6 j0 Q
{
% f. z- Q8 U/ I; d3 r6 L% i
int c;
7 Q- X& A4 A* @9 y2 M: e
SLIST *h,*s,*r;
8 N# l& D S6 E& b5 Y
h=(SLIST *)malloc (sizeof(SLIST) ); //生成头结点
( o- g5 X" ]; m
r=h;
: r( G: x8 {, [
scanf("%d",&c);
! x7 S) ~3 ]' R0 j( S& V6 R
while (c!=-1) //当输入的c为-1时,代表输入结束
% n9 S' M0 r0 F5 P9 O
{
! p6 Z7 m' r5 Q- V6 y6 i9 X: T# V
s=(SLIST *)malloc(sizeof(SLIST) ); //生成一个新结点
5 W8 ~1 ~. }; S7 l# t
s->data=c;
$ F B6 t! y8 Y1 X0 n+ B
r->next=s;
. z- I" u5 S- }8 W2 W3 {
r=s;
+ v6 v4 C/ q K" G
scanf("%d",&c);
% w! B7 H I" u, s, H
8 ?5 {4 l. K& {& Q8 [* l, N# O$ I
}
3 f. }( |. G8 |; H! u2 x$ K$ J; u
r->next ='\0';
G5 z0 g" y u2 [6 [) ~
return h;
3 t# {- z0 f5 x8 ]; E0 }
}
2 s% q( |, B0 O( O
* V3 D) I' h! e4 P
/**/ //想加入一个函数,在刚才输入链表各个数值之后,再输出这些值。如何写呢?
" e1 k. @% L5 x
int printf_list(SLIST *h)
3 N O' ?9 i7 H# B- l
{
/ k+ Z6 J" p4 J7 E) K
//while (!h->next )//教材上经常使用这个语句作为h->next是否为空指针的判断语句,但在VC++里边,这一句与下边一句效果不同,具体原因还不清楚
' {! l1 `, E7 a7 q1 y
while (h->next!=0 )
& _7 T- j# J* @5 _6 J
{
) I- A- ^; U4 {: r/ D
printf("%d\n",h->next->data );
, M# t7 v5 D/ e& s$ `. K- }9 O
h=h->next ;
, T p+ {* u6 y
}
; c) f6 L; e. O" o4 P
return 1;
2 S, F1 S- B0 Y. f
}
2 r" k$ i; t5 t5 R# I
/**/
, u P! R1 @+ L' r. O) [4 w+ |8 s) ~
void main()
( y3 O0 |4 U5 w1 L( J# l; f
{ SLIST *head;
) }/ z# [& i! y) J! U
7 t8 j$ T2 H2 e2 _
head=creat_slist1(); //调用链表建立函数,得到头结点地址
9 u, |& }' r. ` p( W' X' _
printf_list(head);
+ G' j: b3 S$ U1 \. T4 z
}
2 h7 Y) b+ B# `8 B
" N* f/ I. I, s. {2 M
' B! e3 |: @+ Q7 E& d
此函数功能为:输入链表中的数,然后依次输出。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5