(复习考研的休息区,心血来潮,写点代码)
三个规则:
1、不使用c++ stl库进行书写
2、最好基于严蔚敏老师的数据结构
3、最好使用malloc和realloc动态分配内存
(如果有问题或者是有没有实现的操作,请大家提出来)
// 链表实现
#include<iostream>
#include<cstring>using namespace std;#define N 100
#define OK true
#define ERRORINT 0x3f3f3f3f3f
#define ERROR falsetypedef 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;
}