---
# System prepended metadata

title: 資料結構(0321)程式碼

---

# 資料結構(0321)程式碼

### node_3.c
```c=
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
	int data;
	struct node *link;
} LNODE;
void insert_head(LNODE **, int);
void show_list(LNODE *);
int main() {
	LNODE *h = NULL;
	insert_head(&h, 10);
	show_list(h);
	insert_head(&h, 20);
	show_list(h);
	insert_head(&h, 30);
	show_list(h);
	return 0;
}
void insert_head(LNODE **a, int data) {
	LNODE *p;
	p = malloc(sizeof(LNODE));
	p->data = data;
	p->link = NULL;
	if ((*a) == NULL) {
		(*a) = p;
	} else {
		p->link = (*a);
		(*a) = p;
	}
}
void show_list(LNODE *a) {
	while (a != NULL) {
		printf("%3d", a->data);
		a = a->link;
	}
	printf("\n");
}
```

### node_4.c
```c=
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
	int data;
	struct node *link;
} LNODE;
void insert_tail(LNODE **, int);
void show_list(LNODE *);
int main() {
	LNODE *h = NULL;
	insert_tail(&h, 10);
	show_list(h);
	insert_tail(&h, 20);
	show_list(h);
	insert_tail(&h, 30);
	show_list(h);
	return 0;
}
void insert_tail(LNODE **a, int data) {
	LNODE *p;
	p = malloc(sizeof(LNODE));
	p->data = data;
	p->link = NULL;
	if ((*a) == NULL) {
		(*a) = p;
	} else {
		LNODE *t = (*a);
		while (t->link != NULL) {
			t = t->link;
		}
		t->link = p;
	}
}
void show_list(LNODE *a) {
	while (a != NULL) {
		printf("%3d", a->data);
		a = a->link;
	}
	printf("\n");
}
```

### node_5.c
```c=
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
	int data;
	struct node *link;
} LNODE;
void insert_middle(LNODE **, int);
void show_list(LNODE *);
int main() {
	LNODE *h = NULL;
	insert_middle(&h, 40);
	show_list(h);
	insert_middle(&h, 30);
	show_list(h);
	insert_middle(&h, 20);
	show_list(h);
	insert_middle(&h, 50);
	show_list(h);
	insert_middle(&h, 10);
	show_list(h);
	return 0;
}
void insert_middle(LNODE **a, int data) {
	LNODE *p;
	p = malloc(sizeof(LNODE));
	p->data = data;
	p->link = NULL;
	if (((*a) == NULL) || (data < (*a)->data)) {
		p->link = (*a);
		(*a) = p;
	} else {
		LNODE *t = (*a);
		while (t != NULL) {
			if ((data >= t->data) &&
                        ((t->link == NULL) || (data < t->link->data))) {
				p->link = t->link;
				t->link = p;
				break;
			}
			t = t->link;
		}
	}
}
void show_list(LNODE *a) {
	while (a != NULL) {
		printf("%3d", a->data);
		a = a->link;
	}
	printf("\n");
}
```
