#include"stdafx.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> // #include <opencv2/opencv.hpp> #define MAXSIZE 100 // 定义线性表的结构体 typedef struct LNode*List; struct LNode { // 定义数据域和指向像一个节点的指针 int Data; List*next; }; // 获取链表的长度 int length(List*L) { // 备份原链表 List*p = L; // 统计链表节点数的计数变量 int count = 0; while (p) { p = p->next; count++; } return count; } // 查找链表中第k个值的节点 List*find_k(List*L, int k) { List*p = L; int i = 1; // 查找到第k个位置 while (p || (i < k)) { p = p->next; i++; } if (i == k)return p; else return NULL; } // 查找链表中值为e的节点 List*find_e(List*L, int e) { List*p = L; while (p || (p->Data != e)) { p = p->next; } return p; } // 后插入 List*Insert_Back(List*L, int i, int e) { List*p, *s; // 如果为头节点插入 if (i == 1) { s = (List*)malloc(sizeof(struct LNode)); s->Data = e; s->next = L; return s; } // 查找到第i个位置的节点 p = find_k(L, i-1); // 处理越界 if (p == NULL) return NULL; // 进行插入 else { s->Data = e; s->next = p->next; p->next = s; return L; } } // 删除链表中第i个节点 List*Delete(List*L, int i) { // 删除头节点 if (i == 1) { List*s = L; if (s != NULL) L = L->next; free(s); } // 查找到第i个位置 List*p = find_k(L, i - 1); // 获取其后继结点 List*ptr = p->next; if (p == NULL && ptr == NULL) return NULL; p->next = ptr->next; free(ptr); return L; } int main(int, char**) { struct LNode L; return 0; }
线性表的定义
猜你喜欢
转载自blog.csdn.net/oliverkingli/article/details/79801382
今日推荐
周排行