1. 程式人生 > 其它 >資料結構:單鏈表建立、結點插入、刪除程式碼

資料結構:單鏈表建立、結點插入、刪除程式碼

技術標籤:資料結構資料結構單鏈表

基於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;
}