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

תוכן שנמחק תוכן שנוסף
יצירת דף עם התוכן "{{תבנית:ניווט מבוא|15|16}} == ייצוג רשימה שלמה כ struct == עד כה ייצרנו טיפוס המייצג קודקוד ברשימה א..."
(אין הבדלים)

גרסה מ־17:50, 12 בינואר 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; 
}


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