מבוא לתכנות ולמדעי המחשב בשפת C/מבני נתונים דינמיים - טיפוס לייצוג מבנה הנתונים כולו: הבדלים בין גרסאות בדף

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
Matanya (שיחה | תרומות)
מ 2 גרסאות
מ Illuyanka העביר את הדף מבוא למדעי המחשב ב-C/מבוא לתכנות/שיעור 16 ל־[[מבוא לתכנות ולמדעי המחשב/מבני נתונים דינמיים - טיפוס לייצוג מבנה הנתונים כו...
(אין הבדלים)

גרסה מ־20:24, 31 באוקטובר 2012

תבנית:ניווט מבוא

ייצוג רשימה שלמה כ struct

עד כה ייצרנו טיפוס המייצג קודקוד ברשימה אבל לא יצרנו טיפוס המייצג את הרשימה כולה. בהרבה מקרים יש טעם לעשות זאת. הנה דוגמה לרשימה משורשרת המתחזקת את גודלה ומצביעים לתחילתה ולסופה:

#include <stdio.h> 
#include <stdlib.h> 

typedef struct Node {
    int data;
    struct Node* next; 
} Node; 

typedef struct List {
    Node *head; 
    int size; 
    Node *last; 
} List; 


List* newList() {
    List *p = (List*)malloc(sizeof(List)); 
    p->head = p->last = NULL; 
    p->size = 0; 
    return p; 
}

Node* newNode(int data, Node* next) {
    Node *p = (Node*)malloc(sizeof(Node)); 
    p->data = data; 
    p->next = next; 
    return p; 
}

void insertFirst(List *list, int data) {
    if(! list->head) {
	list->head = list->last = newNode(data,NULL); 
	list->size = 1; 
	return; 
    }
    list->head = newNode(data,list->head);
    ++ list->size; 
}

void insertLast(List *list, int data) {
    if(! list->head) {
	list->head = list->last = newNode(data,NULL); 
	list->size = 1; 
	return; 
    }
    list->last->next = newNode(data,NULL); 
    list->last = list->last->next; 
    ++ list->size; 
}

void freeList(List *list) {
    Node *p = list->head;
    Node *p1 = p; 
    while(p) {
	p = p->next; 
	free(p1);
	p1 = p; 
    }
    free(list); 
}

void printList(List *list) {
    Node *p = list->head; 
    while(p) {
	printf("%d --> ",p->data); 
	p = p->next; 
    }
    printf("||   size: %d\n",list->size); 
}

void checkList() {
    int a = 2,i; 
    List *l1 = newList(); 
    List *l2 = newList(); 
    for(i=0; i<10; ++i) {
	insertFirst(l1,a);
	insertLast(l2,a); 
	a*=2; 
    }
    printList(l1); 
    printList(l2); 
    freeList(l1); 
    freeList(l2); 
}


int main() {
    checkList(); 
    return 0; 
}


תבנית:ניווט מבוא