数据结构(C++)——链表
2020-07-30 15:11
901 查看
数据结构(C++)——链表
链表结构体的定义:
// struct ndoe typedef struct Node { int data; struct Node* next; }Node, *PNode;
头插法插入结点:
1.建立头结点,并分配空间
2.建立新结点,新节点->next指向上一个节点,头结点->next指向新结点
PNode List_HeadInsert(PNode &head) { head = (Node*)malloc(sizeof(Node)); //head node if (!head) /* 检查指标 */ { printf("failure! \n"); exit(1); } PNode new_node; head->next = NULL; // initialize head node int qon; cout << "please enter the quantity of numbers:"; cin >> qon; for (int i = 0; i < qon; i++) { cout << "please enter a number:" ; int x; cin >> x; new_node = (Node*)malloc(sizeof(Node)); if (!new_node) /* 检查指标 */ { printf("failure! \n"); exit(1); } new_node->data = x; new_node->next = head->next; head->next = new_node; } return head; }
尾插法插入节点:
1.建立头结点,并分配空间
2.建立新结点,给新结点->data赋值。设置新结点next为NULL,最后一个节点的next指向新节点
PNode List_TailInsert(PNode &head) { head = (Node*)malloc(sizeof(Node)); //head node if (!head) /* 检查指标 */ { printf("failure! \n"); exit(1); } PNode new_node; PNode ptr; head->next = NULL; // initialize head node ptr = head; int qon; cout << "please enter the quantity of numbers:"; cin >> qon; for (int i = 0; i < qon; i++) { int x; cout << "please enter a number:" << endl; cin >> x;; new_node = (Node*)malloc(sizeof(Node)); if (!new_node) /* 检查指标 */ { printf("failure! \n"); exit(1); } new_node->data = x; new_node->next = NULL; ptr->next = new_node; ptr = ptr->next; // point ro the next node } return head; }
释放空间:
void Free_lnklst(PNode &head) { PNode p, temp; p = head->next; int i = 1; while (i == 1) { if(p->next == NULL) i = 0; temp = p; p = p->next; free(temp); } }
按序号搜索:
PNode Serch_order(PNode head, int i) // search by serial number { int count = 1; Node* p = head; if (i == 0) return head; if (i < 0) return NULL; while (count <= i) { if (p == NULL) return NULL; p = p->next; count++; } return p; }
按值搜索
//search by value return index int Serch_value(PNode head, int number) { PNode p = head->next; int i(1); while (p->data != number) { if (p->next == NULL) return NULL; p = p->next; i++; } return i; }
插入结点:
1.建立新结点
2.新结点指向原ith结点,ith的前一个节点指向新结点。
void Insert(PNode head, int ith) { PNode new_node; cout << "please enter the data:"; int x; cin >> x; new_node = (Node *)malloc(sizeof(Node)); new_node->data = x; new_node->next = Serch_order(head, ith - 1)->next; Serch_order(head, ith - 1)->next = new_node; }
删除节点:
void Delete_node(PNode head, int ith) { PNode ptr, temp_ptr; ptr = Serch_order(head, ith - 1); temp_ptr = ptr->next; ptr->next = Serch_order(head, ith + 1); free(temp_ptr); }
求表长:
int Dertermin_len_lnklst(PNode head) { PNode ptr; ptr = head->next; int len = 0; while (ptr != NULL) { len++; ptr = ptr->next; } return len; }
相关文章推荐
- 数据结构之链表排序
- 数据结构实验之链表八:Farey序列
- 数据结构——单链表
- 数据结构之链表的增删操作的Java实现
- 数据结构实验之链表三:链表的逆置
- 数据结构上机测试2-1:单链表操作A
- 【数据结构】单链表—求链表中间节点(只遍历一次链表)— 快慢指针
- 【数据结构】单链表—在O(1)时间删除链表结点
- 基础数据结构(栈,队列,数组,链表)
- 使用VS学习链表时遇到的关于取结构体子数据“.”与“->”区别
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表三:链表的逆置
- 暑假集训第1天链表-数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表二:逆序建立链表
- C++数据结构之链表的创建
- [数据结构算法学习] 单向链表
- 数据结构实验之链表五:单链表的拆分
- 数据结构(一)循环链表 约瑟夫环
- 数据结构实验之链表七:单链表中重复元素的删除
- 【数据结构】头插法建立单链表