Danh sách liên kết dùng cấp phát động, gồm các nút (node). Mỗi nút có 2 phần: dữ liệu và liên kết.
Các loại danh sách liên kết
- Đơn (Singly)
- Đôi (Doubly)
- Đơn vòng (Circular singly)
- Đôi vòng (Circular doubly)
Danh sách liên kết đôi
Mỗi nút có con trỏ prev (trước) và next (sau).
Chương trình chèn nút tại vị trí bất kỳ
#include <stdio.h>
#include <stdlib.h>
struct node {
int num;
struct node *preptr;
struct node *nextptr;
} *stnode, *ennode;
void DlListcreation(int n);
void DlLinsertNodeAtBeginning(int num);
void DlLinsertNodeAtEnd(int num);
void DlLinsertNodeAtAny(int num, int pos);
void displayDlList(int a);
int main() {
int n, num1, a, insPlc;
stnode = NULL; ennode = NULL;
printf("\n\n Doubly Linked List: Insert node at any position:\n");
printf("---------------------------------------------------\n");
printf(" Input number of nodes: "); scanf("%d", &n);
DlListcreation(n);
a = 1; displayDlList(a);
printf(" Input position (1 to %d) to insert: ", n+1); scanf("%d", &insPlc);
printf(" Input data for position %d: ", insPlc); scanf("%d", &num1);
DlLinsertNodeAtAny(num1, insPlc);
a = 2; displayDlList(a);
return 0;
}
// Các hàm tạo danh sách, chèn đầu, chèn cuối, chèn giữa, hiển thị...
// (Xem mã nguồn đầy đủ trong nội dung gốc)
Kết quả mẫu
Input the number of nodes: 5 Input data for node 1: 23 ... node 5: 10 Data entered: 23 12 11 34 10 Input position (1 to 6): 5 Input data for position 5: 78 After insertion: 23 12 11 34 78 10