简单实现单链表
结构
头节点:便于操作链表,数据域不存放东西,指针指向首节点。
首节点:第一个存放有效数据的节点。
尾节点:最后一个.....
头指针:指向头节点的指针变量
尾指针:指向尾节点的指针变量
通过头指针可以唯一确定一个链表,能够得到链表的所有元素。头指针存放头节点的地址(head_ptr=head)。通过 ‘->’ 可以取出头节点中的元素,如指向下一个节点的指针。再通过->又可以取出下一个节点的元素。
分类
单链表
双链表:有两个指针,一个指着前节点,一个后节点。
1 #include <iostream>
2 using namespace std;
3
4 typedef struct Node
5 {
6 int e;
7 struct Node* next;
8 }Node, *Linklist;
9 //Linklist 一个节点的指针
10 void initlist(Linklist &head)
11 {
12 int n;
13 Linklist head_ptr,tail_ptr,temp;
14 head = (Linklist)malloc(sizeof(Node));
15 head->next = nullptr;
16 head_ptr = head;
17 tail_ptr = head;
18 cout << "输入需要节点个数:";
19 cin >> n;
20 for (int i = 0; i < n; i++)
21 {
22 temp= (Linklist)malloc(sizeof(Node));
23 temp->next = nullptr;
24 tail_ptr->next= temp ;
25 cout << "第" << i + 1 << "个节点:";
26 cin >> temp->e;
27 tail_ptr=tail_ptr->next ;
28 }
29
30 }
31
32 void show(Linklist list)
33 {
34 Linklist p = list;
35 p = p->next;
36 while (p != nullptr)
37 {
38 cout << p->e << endl;
39 p = p->next;
40 }
41 }
42
43 void remove(Linklist list)
44 {
45 int n;
46 printf("输入需要删除的节点:");
47 cin >> n;
48 Linklist p=list;
49 while (p->next->e != n)
50 {
51 p = p->next;
52 }
53 Linklist t = p->next;
54 p->next = p->next->next;
55 free(t);
56 printf("删除结果:\n");
57 show(list);
58
59 }
60
61 void insert(Linklist& list) {
62 int n,i=0;
63 Linklist t = (Linklist)malloc(sizeof(Node));
64 Linklist p = list;
65 printf("输入插入的节点元素:");
66 cin >> t->e ;
67 printf("输入插入的位置:");
68 cin >> n;
69 p = p->next;
70 while (1)
71 {
72 if (i == n - 1)
73 {
74 break;
75 }
76 p = p->next;
77 i++;
78 }
79 t->next = p->next;
80 p->next = t;
81 printf("插入结果:\n");
82 show(list);
83
84
85 }
86
87 int main()
88 {
89 Linklist list;
90 initlist(list);
91 show(list);
92 remove(list);
93 insert(list);
94 return 0;
95 }


浙公网安备 33010602011771号