基于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版权协议,转载请附上原文出处链接和本声明。