(复习考研的休息区,心血来潮,写点代码)
三个规则:
1、不使用c++ stl库进行书写
2、最好基于严蔚敏老师的数据结构
3、最好使用malloc和realloc动态分配内存
(如果有问题或者是有没有实现的操作,请大家提出来)
cpp
// 链表实现
#include<iostream>
#include<cstring>
using namespace std;
#define N 100
#define OK true
#define ERRORINT 0x3f3f3f3f3f
#define ERROR false
typedef struct LNode
{
// 单链表
int data;
struct LNode *ne;
}LNode , *LinkList;
void InitList(LinkList &L)
{
L = (LinkList)malloc(sizeof(LNode));
L -> ne = NULL; // 建立带头节点的单链表
}
// 头插法
void HeadInsert(LinkList &L)
{
for(int i = 1;i <= 10;i ++)
{
LinkList p = (LinkList)malloc(sizeof(LNode));
p -> data = i;
p -> ne = L -> ne;
L -> ne = p;
}
}
// 尾插法
void TailInsert(LinkList &L)
{
LinkList now = L;
for(int i = 1;i <= 10;i ++)
{
LinkList p = (LinkList)malloc(sizeof(LNode));
p -> data = i;
now -> ne = p;
now = p;
}
now -> ne = NULL;
}
// 插入到第idx位置
bool InsertList(LinkList &L , int idx , int e)
{
LinkList p = L;
int i = 0;
while(p && i < idx - 1)
{
p = p -> ne;
i ++;
}
if(!(p -> ne) || i > idx - 1) return ERROR;
cout << "插入数据" << e << endl;
LinkList s = (LinkList) malloc(sizeof(LNode));
s -> data = e;
s -> ne = p -> ne;
p -> ne = s;
return OK;
}
// 删除节点
int DeleteList(LinkList &L , int idx)
{
LinkList p = L;
int i = 0;
while(p && i < idx - 1)
{
p = p -> ne;
i ++;
}
if(!p || i > idx - 1) return ERROR;
int e = p -> ne -> data;
cout << "删除节点" << e << endl;
p -> ne = p -> ne -> ne;
return e;
}
void print(LinkList L)
{
LinkList p = L;
cout << "当前链表数据为:";
p = p -> ne;
bool f = false;
while(p)
{
if(f) cout << "->";
cout << p -> data;
f = true;
p = p -> ne;
}
cout << endl;
}
int main()
{
LinkList L;
InitList(L);
// HeadInsert(L);
// print(L)
TailInsert(L);
print(L);
InsertList(L , 3 , 11);
InsertList(L , 5 , 12);
print(L);
DeleteList(L , 6);
DeleteList(L , 3);
print(L);
return 0;
}