void creat(List *&L, int n)//创建
{
List *s, *r;
L = new List;
L->next = NULL;
r = L;
for (int i = 0; i < n; i++)
{
s = new List;
cin >> s->data;
r->next = s;
r = s;
}
r->next = NULL;
}
void destory(List *&L)//销毁
{
List *pre = L, *p = L->next;
while (p != NULL)
{
delete pre;
pre = p;
p = pre->next;
}
delete pre;
}
void print(List *L)//输出
{
List *p = L->next;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
}
int lenth(List *L)//求长度
{
int n = 0;
List *p = L;
while (p->next != NULL)
{
n++;
p = p->next;
}
return n;
}
bool get(List *L, int i, int &e)//获取所选位置的元素
int j = 0;
List *p = L;
if (i <= 0)return false;
while (j < i&&p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)return false;
else
{
e = p->data;
return true;
}
}
int serch(List *L, int e)//获取所选元素的位置
{
int i = 1;
List *p = L->next;
while (p!= NULL&&p->data != e)
{
p = p->next;
i++;
}
if (p == NULL)return 0;
else return i;
}
bool add(List *&L, int i, int e)//插入到第i个节点
{
int j = 0;
List *p = L, *s;
if (i <= 0)return false;
while (j < i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)return false;
else
{
s = new List;
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
}
bool _delete(List *&L, int i)//删除第i个节点
{
int j = 0;
List *p = L, *q;
if (i <= 0)return false;
while (j < i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)return false;
else
{
q = p->next;
if (q == NULL)return false;
p->next = q->next;
delete q;
return true;
}
}
void sort(List *&L)//采用插入法
{
List *p, *pre, *q;
p = L->next->next;
L->next->next = NULL;
while (p != NULL)
{
q = p->next;
pre = L;
while (pre->next != NULL&&pre->next->data < p->data)
{
pre = pre->next;
}
p->next = pre->next;
pre->next = p;
p = q;
}
}
void reverse(List *&L)//采用三个指针abc,前中后,c保存后,ba操作中保存到前
{
if (L == NULL || L->next == NULL)
return;
List *pre, *cur, *rear;
pre = L;
cur = L->next;
while (cur)
{
rear = cur->next;
cur->next = pre;
pre = cur;
cur = rear;
}
L->next->next = NULL;//使第一个结点的指针域为空
L ->next = pre;//指向新的一头
}
动态链表的操作
最新推荐文章于 2023-04-04 22:23:21 发布