数据结构:单链表创建、结点插入、删除代码

基于C++的实现

#define _CRI_SECURE_NO_WARNINGS
#include<iostream>
#include"stdlib.h"
#include"time.h"
using namespace std;

constexpr auto maxsize = 20;
constexpr auto OK = 1;
constexpr auto ERROR = 0;
constexpr auto TRUE = 1;
constexpr auto FAlSE = 0;

typedef int ElemType;     //用ELemType代表int类型
typedef int status;

typedef struct Node
{
	ElemType data;
	struct Node* next;
}Node;
typedef struct Node LinkList;   //将struct Node* 定义为LinkList

LinkList* CreateLinklist(LinkList* L, int n)  //尾插法创建单链表
{
	LinkList* p;
	int i;
	srand(time(0));
//	L = new LinkList;
	L->next = NULL;
	for (i = 0; i < n; i++)
	{
		p = new LinkList;
		p->data = i;
		p->next = L->next;
		L->next = p;
	}
	return L;
}
int Getelem(LinkList* L, int i, ElemType* e)  //获取链表中的某个元素
{
	int j;
	LinkList* p;
	p = L->next;
	j = 1;
	while (p != NULL && j < i)
	{
		p = p->next;
		++j;
	}
	if (!p || j > i)
	{
		return ERROR;
	}
	*e = p->data;
	return *e;
}
status InsertNode(LinkList* L, int i,ElemType e)//插入结点
{
	int j;
	LinkList* p=L;
	LinkList* s;
	j = 0;
	while (j < i && p!= nullptr) 
	{
		p = p->next;
		++j;
	}
	if (p == nullptr || j > i)
	{
		return ERROR;
	}
	s = new LinkList;
	s->data = e;
	s->next = p->next;
	p->next = s;
	return OK;
}
status DeleteNode(LinkList* L, int i)  //删除节点
{
	int j;
	j = 0;
	LinkList* s;
	LinkList* p;
	p = L;
	if (j < i && p != nullptr)
	{
		p = p->next;
		++j;
	}
	if (p == nullptr || j > i)
	{
		return ERROR;
	}
	s = p->next;
	p->next = s->next;
	s->next = NULL;
	delete(s);
	return OK;
}
status DeleteList(LinkList* L)  //删除单链表
{
	LinkList* p;
	LinkList* q;
	p = L->next;
	while (p)
	{
		q = p->next;
		delete(p);
		p = q;
	}
	L->next = NULL;
	return OK;
}

int main()
{
	LinkList *L=new LinkList;
	CreateLinklist(L, 5);
	InsertNode(L, 1, 10);
	DeleteNode(L, 1);
	int* b = new int;
	int a=Getelem(L, 1, b);
	cout <<a << endl;
}

 


版权声明:本文为ouyangyiwen原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。