Ngôn Ngữ Lập Trình C Dữ Liệu Kiểu Cấu Trúc

55 332 0
Ngôn Ngữ Lập Trình C Dữ Liệu Kiểu Cấu Trúc

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

NGÔN NGỮ LẬP TRÌNH C Dữ liệu kiểu cấu trúc Ninh Thị Thanh Tâm Khoa CNTT – HV Quản lý Giáo dục Mục đích Biết cách khai báo kiểu liệu phức tạp: cấu trúc  Cách biểu diễn kiểu danh sách liên kết nhờ cấu trúc tự trỏ  Các thao tác danh sách liên kết  Nội dung  Cấu trúc niệm, định nghĩa  Khai báo cấu trúc  Đặt tên kiểu liệu  Thao tác biến cấu trúc  Truyền biến cấu trúc cho hàm  Khái  Các cấu trúc tự trỏ  Ngăn xếp - LIFO  Hàng đợi - FIFO  Cây nhị phân – BINARY TREE Cấu trúc Khái niệm, định nghĩa  Khai báo cấu trúc  Đặt tên kiểu liệu  Thao tác biến cấu trúc  Truyền biến cấu trúc cho hàm  Khái niệm, định nghĩa  Cấu trúc:  Một kiểu liệu bao gồm nhiều thành phần thuộc nhiều kiểu liệu khác Khai báo cấu trúc  Khai báo kiểu liệu cấu trúc: struct { };  struct từ khóa đứng trước khai báo cấu trúc  tên hợp lệ, dùng làm tên cấu trúc  tương tự khai báo biến Ví dụ struct sinhvien { char ho_ten[30]; float diemtb; }; struct diem { float x,y; }; Khai báo cấu trúc (2) Khai báo biến cấu trúc: struct ; Ví dụ:  struct sinhvien sv, dssv[100]; struct diem p, q, dsdiem[50]; Khai báo cấu trúc (3)  Khai báo đồng thời cấu trúc biến cấu trúc: struct [] { } ; Ví dụ struct dagiac { int n; struct diem dsdinh[20]; } dg1, dg2;  Có thể khai báo trực tiếp kiểu thành phần biến cấu trúc bên cấu trúc lớn struct dagiac { int n; struct { float x, y; } dsdinh[20]; } dg1, dg2; /*dsmn4.c*/ #include #include #include typedef struct mn { int so; struct mn *next; } mn; mn *ds; int m = 10; void taoday(){ int i; mn *p; randomize(); ds = NULL; for (i=0; iso = random(51); p->next = ds; ds = p; } } void sapxep(){ mn *p, *t; int x; p = ds; for (p = ds; p->next; p = p->next) for (t = p->next; t; t=t->next) if (p->so < t->so) { x = p->so; p->so = t->so; t->so = x; } } void inday(){ mn *p; for (p=ds; p; p=p->next) printf("%5d",p->so); puts(""); } void xoasau(mn *p){ if (p->next) p->next = (p->next)->next; else printf("Khong hop le"); } void main(){ mn *p; clrscr(); taoday(); inday(); sapxep(); inday(); for (p = ds; p->next;) if ((p->next)->so %2==0) xoasau(p); else if (p->next) p = p->next; if (ds->so%2==0) ds = ds->next; inday(); getch(); } Kết Ví dụ - FIFO  Đưa vào danh sách móc nối thông tin tên điểm học sinh; nhập điểm chuẩn:  Đưa học sinh đạt điểm chuẩn vào đầu danh sách  Những học sinh không đạt xuống cuối danh sách (không làm thay đổi thứ tự) /*dsmn5.c*/ #include #include #include typedef struct { char ten[20]; float diem; } hocsinh; typedef struct mn{ hocsinh hs; struct mn *next; } ptr; ptr *ds; void taods(){ ptr *p, *q; hocsinh x; float d; char w[20]; ds = NULL; puts("Nhap danh sach ten, diem Het go /"); fflush(stdin); gets(w); while (strcmp(w,"/")){ strcpy(x.ten,w); scanf("%f",&d); x.diem = d; p = (ptr*)malloc(sizeof(ptr)); p->hs = x; p->next = NULL; if (ds) q->next = p; else ds = p; q = p; fflush(stdin); gets(w); } } void sapxep(){ float d; hocsinh x; ptr *p; int tiep = 1; printf("Nhap diem chuan"); scanf("%f",&d); while (tiep){ tiep = 0; for (p=ds; p->next; p=p->next) if (p->hs.diemnext)->hs.diem>=d){ x = p->hs; p->hs = (p->next)->hs; (p->next)->hs = x; tiep = 1; } } } void inds(){ ptr *p; for (p=ds; p; p=p->next) printf("%s %6.1f\n",p->hs.ten,p->hs.diem); getch(); } void main(){ taods(); inds(); sapxep(); inds(); } Cây tìm kiếm nhị phân  Ví dụ:  Nhập dãy số thực  Xây dựng tìm kiếm nhị phân từ dãy số /*tree.c*/ #include #include #include typedef struct node { float k; struct node *left, *right; } node; node *goc; node *nutmoi(float x); void them(float x, node *p); void taocay(); void incay(node *p); void tim(float x, node *p, int t); void main(){ float y; taocay(); incay(goc); printf("Nhap y="); scanf("%f",&y); tim(y,goc,1); incay(goc); getch(); } node *nutmoi(float x){ node *p; if(!(p=(node*)malloc(sizeof(node)))){ printf("Loi cap phat bo nho"); getch(); exit(0); } p->k = x; p->left = p->right = NULL; return p; } void them(float x, node *p){ if (x==p->k) return; if (xk){ if (p->left) them(x,p->left); else p->left = nutmoi(x); } else{ if(p->right) them(x,p->right); else p->right = nutmoi(x); } } void taocay(){ float x; int i, n; printf("x="); scanf("%f",&x); printf("n="); scanf("%d",&n); for (i=1; ileft); printf("%6.1f",p->k); incay(p->right); } void tim(float x, node *p, int t){ if(!p){ printf("Khong tim thay"); getch(); exit(0); } if (p->k==x){ puts("Da tim thay"); getch(); exit(0); } if (xk) tim(x,p->left,t+1); else tim(x,p->right,t+1); }

Ngày đăng: 14/12/2016, 10:33

Tài liệu cùng người dùng

Tài liệu liên quan