标题: 数据结构,清华 严蔚敏,例题代码(自己写的,持续更新中) [打印本页] 作者: 慢跑20 时间: 2014-3-10 21:34 标题: 数据结构,清华 严蔚敏,例题代码(自己写的,持续更新中) 本帖最后由 慢跑20 于 2014-3-10 21:38 编辑 4 E: |! @ y, v# c7 p# y: A5 P; R6 I, k i7 i
计算机基础课数据结构,清华严蔚敏这本书是公认的一本好书。 ) T V5 A8 S# O# z6 _4 P [; e刚好这学期我们学习数据结构,想把一些例题的代码写一些、既提高了C语言的水平,又可以加深对数据结构的理解,为以后打下良好的基础。. A4 e% \9 Q( K; O& p! D$ x 作者: 慢跑20 时间: 2014-3-10 21:34
本层占楼编辑; D( ~$ E/ w9 w, b+ R- s 作者: 慢跑20 时间: 2014-3-10 21:35
20页,例2.1 A,B两个集合,合并成C集合。 9 O4 Q0 A' z% Z. v这个代码是用数组的、算是比较简单的。# S" p. G T/ m& p2 {
0 U, y' C8 _ U) F& E1 g8 e4 E5 M#include<stdio.h> 9 H9 u' v; A! Z1 E. _9 L; Zint L_length(char []);9 z9 \- ]/ g \/ I
int main(){9 }# p) L; ?( C3 w4 W
void Union(char [],char [],char []);4 K' P+ Z% Y! F* x' E( K
$ W1 Z' C; A: o+ d4 I. K# N char a[10]; # C( `8 p3 ^, T# x: i0 P9 n3 r char b[10]; ( O5 F; }. C4 }/ I) f: W char c[20]; 0 \* `3 }- r6 Q1 e gets(a); : z* S; Y$ [9 x1 I$ b" N printf("输入的集合A是\n"); 0 q' t4 y( k( f puts(a); , P N6 i' ]/ R/ d7 `* A2 @' x & k0 V# ?7 N, K gets(b); 1 J3 c# P& a, W' w printf("输入的集合B是\n");5 X& R" g# L) Y- u. l, K1 C
puts(b); ) e9 D5 u: Y% x3 y) I: j. T& W5 e* l% u" O
Union( a, b, c); $ y _4 [% i0 y2 U3 N printf("last得到集合C是\n");; C8 q; u, x& {. ]& L" \# |
puts(c); 8 S0 e& R. _, ]9 K% ~ return 0; ) h4 U9 U; P. }, m}4 x# t+ s# b; E/ T7 M
- n" E# U1 z |4 y& Wvoid Union(char a[],char b[],char c[])! k$ M3 f' A7 i O& |8 a
{# m i9 a: N! ^0 \
int flag=1,t=0,i,j,m,n; 7 u# c. S: T; r$ Y b m=L_length(b); ) T. E* N- h. k: T n=L_length(a);$ Q5 H3 y/ k, J# o# @
for(j=0;j<n;j++) " B) A6 \- Z5 X3 d' e$ L c[j]=a[j];) Q+ _& n) a7 Z/ J3 K$ b
for(i=0;i<m;i++,flag=1) //i为b数组的下标,m为数组个数; j为a数组的下标,n为数组个数;2 Q! e! {4 |2 t5 R' G/ l
{for(j=0;j<n;j++)- b8 _2 |( w) A6 c2 Y
if(b[i]==a[j]) flag=0;//flag=0,说明有重复的了- |7 }9 X" G, ]. B! l( ?
if(flag) { c[n+t]=b[i];t++ ;}7 |9 ^! \ q: C! _; |
} T0 l5 S% Z! G" B c[n+t]='\0'; 8 y! ~0 ?2 N/ V' q r * j2 q. P/ x- R$ Z4 Q! n+ n}3 _; y6 _+ W' E: E3 U3 {
) ~3 M, ^- q8 v! u7 gint L_length(char a[]); b3 F L$ w) `( ~: S; a: _
{3 I$ }* k! k. r1 ^1 q) C; W. F
int i,t=0;; ! B0 v3 j1 G& a for(i=0; a[i]!='\0';i++ ) ! l" `* w" Z1 D3 i* M t++; , j; T, g& x0 }; u return t;0 j* y' f, ]# g) u3 e; ^, x
} $ j) A: B" b" P9 C5 O $ @9 N, k* ]' ?2 \作者: 慢跑20 时间: 2014-3-14 09:32 本帖最后由 慢跑20 于 2014-3-19 13:53 编辑 0 k% [% o& P% y) c% i
# i; T4 g6 j% U$ O0 H4 z: vli2.1yong用指针: * [! X- b: g; P; W2 j* r J; E # c# x' O( D9 x, Z0 M4 |% H#include "stdio.h"% a r) U9 h9 I
#include "string.h" 4 r7 n v1 k1 j) h. Mvoid Union(char *a,char *b,char *c) ( a e( _6 k! F# d1 I{2 f' ?# V7 w% z
char *p=a; $ K" J: G" t; P6 \ h/ a3 \4 R" jchar *q=b;" w" Q3 Q6 S9 C+ I& ~; w
char *r=c; ' O4 M4 Q/ V+ ?2 ~ E! C; kwhile(*p) *r++=*p++;0 K9 D' i; O& y
p=a; ) L8 ?9 x/ A. E0 Z4 w, wfor( ;*q!=0 ; q++,p=a )+ e9 ~. ]& A: t0 d" R. x& U
{while(*p) 5 `& _7 ]/ v7 q# e, [* \+ \2 j: _if(*q==*p){q++;p=a;}. S- H# K; e+ ?, B4 s) i) j
else p++; + `! l: N( Z* R" N4 l; I*r=*q;* j a0 S3 m& |+ @# Y* y
r++; , b: ?7 J. C/ k' ]4 L" v N}( {- ^2 B1 ]1 [, W
*r=0; B" w" W5 q4 o9 Q" J
* R1 g: h) x2 H2 }}8 G9 H" N% Q$ b; d9 i
; v. Y* [" k8 F: K, R6 \8 jint main(){' V/ |9 r; U' B! S- j% o, u v, `( g
* b- P. r6 I; z: \char a[10];0 ?+ R/ B6 ]# j% s" b5 ]$ z
char b[10];5 ^1 \' X$ m! N
char c[20]; . j1 o- W M5 o0 o9 z* D" Fgets(a);+ q3 `0 v7 R" C7 P0 x6 @: H
printf("输入的集合A是\n");# R; r: q: i+ Q" j. m8 W) r
puts(a);8 ], b. z4 w! `7 R1 G
6 O& O) j: S X5 B0 J& T
gets(b);& ~# X$ t M F- V: R L. y, j/ C' `' C
printf("输入的集合B是\n");% T6 V, M, y' G1 W
puts(b);- q& B2 @ U, s3 n) _
) r! ~2 r% W: [0 o. ? PUnion(a,b,c);7 Q- s& ^ D7 t5 y
printf("last得到集合C是\n"); / S$ k6 O, o3 X$ @$ B+ S, T9 k, H4 Eputs(c); : S" F$ y, U% W$ kreturn 0;5 m6 {+ h6 K9 m t0 B
} & \8 P# U+ ^# i# q) ] S作者: 慢跑20 时间: 2014-3-14 09:33
第2章最后开始用链表了,由于以前没有接触。这里要重新学习链表: & f; r; @1 x6 \0 J/ w0 g#include<stdio.h>5 H0 s; `4 r# f. Z7 H, s
m: Y' {: u5 e; u! a) n' q" ]. e struct node 1 \4 ~, V' w) Y# H{ - \! g! {! i# }3 Z9 ]/ P int data;! X% i) b \$ t. ~# W: ?9 C* y9 D: y
struct node *next; , p1 s+ Y4 h! }3 p* Y0 ?* z};# N/ a6 P' A) n3 R# B; |
//typedef struct node NODETYPE;/ c! \% B( x; P2 q
void main() l( h4 [* u' s% ]& S{ & x/ `& k# n7 A% n7 E //NODETYPE + N( H1 }; ?% V3 ^. u' _/ k node a,b,c,*h,*p;; o `: \% y, b, G: Q3 e# J" H
a.data=10;b.data=20;c.data=30; & O/ v" _( {; e7 I+ N. E h=&a;% l, ]$ V$ r; L9 o! e
a.next=&b;b.next=&c;c.next='\0'; * w. d+ n+ Y+ X5 Y5 M, z4 h p=h; 0 s, n( G& V0 j while(p) $ _( P B" w/ \5 j( V9 g% x. I$ d {$ b( R" A8 g0 _, K- D) ^
printf("%d ",p->data);5 r% K2 u4 d& T+ f2 F+ P8 {
p=p->next; 7 t, r& c3 `0 E8 N8 L } % \" [; B8 ]/ L, y3 q- v$ u printf("\n");( w/ o) L5 j! X4 {
}' `7 K9 { a# K+ P8 F( U
6 z' m8 m3 I2 Z$ G" t. C0 W" ?* ?这是一个简单的链表。从这里可以了解规则作者: 慢跑20 时间: 2014-3-14 09:38
此代码为生成一个链表的代码:4 y4 [! S4 Q8 X) C
#include<stdio.h>+ j8 r7 E% y5 v
#include<stdlib.h> ' A D+ z/ i* E& Estruct slist " `# c3 e- ]; u% j. ^{ 1 [2 {+ p2 X5 `2 F* i4 C int data;1 M7 r2 T8 p6 ~% \: q
struct slist *next; % i: U9 n) m1 @" {' t) e+ I}; ; W3 e9 m* o. ~. I" E; ^) ptypedef struct slist SLIST;8 v( l+ x4 M8 d. I# z% {
SLIST *creat_slist1()8 h) i; i" O; J. l+ W
{* \. O7 X9 m8 Z# b/ x9 U
int c; . L/ B" e1 b1 f2 q SLIST *h,*s,*r;4 f2 a! p3 r* f( ^* N
h=(SLIST *)malloc (sizeof(SLIST) ); //生成头结点2 N6 _( n5 i2 O: i/ Y# {. ]
r=h; ' D* N# A! Q- m a2 O' n8 w: p V( J scanf("%d",&c);7 o' X h4 I, S
while (c!=-1) //当输入的c为-1时,代表输入结束0 K0 r0 U2 z' {6 {2 x6 [% b
{ 7 W5 x8 h: Z% c s=(SLIST *)malloc(sizeof(SLIST) ); //生成一个新结点; [. }0 P' f* d& H' m& M, B2 k
s->data=c;: m" m4 g5 a( h6 A2 e% z2 j E5 m
r->next=s; 4 m3 b: t. T: W9 v9 o; s# G2 Y r=s;6 |# x' {$ A. k$ x& _
scanf("%d",&c); / m& B; n7 }1 c2 l# h 6 P8 J5 D' q+ \0 ?" p6 e }' p1 i3 z' B( o( d, e
r->next ='\0'; % u. p' J' _0 B( I+ ^/ Q7 B return h;2 x( M+ u1 p; }: N* |
}8 p* C) W$ p- G- q5 I8 M$ {
W1 ]% d) X- @( f6 N7 G. O' V- J/*, v, n, g1 U' e' N! d& M, G
printf_list(&head) 6 A, }. X h1 f( R7 K/ a/ ~{ SLIST *h,*s,*r; + J/ I/ t/ d4 A" e% s int c;( ~7 p* W8 p3 }5 a T% e( K! u
h=(SLIST *)malloc (sizeof(SLIST) ); ) G8 i# w+ c4 |; _) Z r=h;$ E% g! D' M( v6 t5 J
s->data=c;' i0 d3 o( h* x. g( S8 K# F3 D
//scanf("%d",&c);! t1 `6 D- C4 Q% S. ~5 H
while (c!=-1)$ E6 x* F, ?0 b/ y6 X. ^7 n
{) w' u( C- t* @7 i# [: S: h8 G' D
printf("%d",c);; ]& E& V6 Y5 j; d* E: |1 s* f
s=(SLIST *)malloc(sizeof(SLIST) );: {* h5 E0 P* W \% r0 q
s->data=c;+ G& L$ g- W$ }! X
r->next=s; 8 {% b0 q% |. N' ^0 t! H r=s;+ ?! a2 ^% N4 t# X; U