线性表的定义

#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