מבוא לתכנות ולמדעי המחשב בשפת C/מבני נתונים דינמיים - טיפוס לייצוג מבנה הנתונים כולו: הבדלים בין גרסאות בדף
מ 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;
}