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

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


{{תבנית:ניווט מבוא|15|16}}
{{תבנית:ניווט מבוא|15|16}}
[[קטגוריה:מבוא לתכנות ולמדעי המחשב אורי מוסנזון]]

גרסה מ־18:55, 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; 
}


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