单链表
链表的结构
分为数据域和指针域
struct Node
{
int date;
Node* nxt;
};
链表的功能
//1.头插法
void creatListF(Node* l, int* a, int n);
//2.尾插法
void creatListT(Node* l, int* a, int n);
//3.遍历
void travelList(Node* l);
//4.插入结点
int searchElem(Node* l, int e);
//5.修改结点
void alterElem(Node* l, int cnt,int e);
//6.删除结点
void eraseElem(Node* l, int cnt);
链表的功能的代码实现
//头插法 F:first 头
void creatListF(Node* l, int* a,int n)
{
int i;
l->nxt = NULL;
for (i = 0; i < n; i++)
{
Node* s = new Node;
s->date = a[i];
s->nxt = l->nxt;
l->nxt = s;
}
}
//尾插法 T:tail 尾部
void creatListT(Node* l, int* a, int n)
{
l->nxt = NULL;
Node* r=l;
int i;
for (i = 0; i < n; i++)
{
Node* s = new Node;
s->date = a[i];
s->nxt = r->nxt;
r->nxt = s;
r = r->nxt;
}
}
//链表的遍历
void travelList(Node* l)
{
if (l == NULL)
{
printf("List is empty\n");
return;
}
Node* r = l;
printf("List : \n");
while (true)
{
printf("%d ", r->date);
r = r->nxt;
if (r->nxt == NULL)
{
printf("%d ", r->date);
break;
}
}
cout << endl;
}
//查找链表结点
int searchElem(Node* l, int e)
{
Node* r = l;
int cnt = 1;
while (r->date != e)
{
if (r->nxt == NULL)
{
if (r->date == e)
return cnt;
else
cnt = -1;
break;
}
r = r->nxt;
cnt++;
}
return cnt;
}
//修改结点
void alterElem(Node* l, int cnt, int e)
{
Node* r = l;
int now = 1,flag=1;
while (true)
{
if (now == cnt)
{
r->date = e;
return;
}
if (flag > cnt)
return;
r = r->nxt;
now = flag += 1;
}
}
//删除结点
void eraseElem(Node* l, int cnt)
{
if (cnt == 1)
{
if (l->nxt != NULL)
l = l->nxt;
else
{
delete l;
return;
}
}
int now = 1,flag=1;
Node* r = l;
while (true)
{
if (r->nxt->nxt == NULL)
{
r->nxt = NULL;
return;
}
if (now == cnt-1)
{
Node* temp = r->nxt;
r->nxt = temp->nxt;
delete temp;
return;
}
if (flag > cnt)
return;
now = flag += 1;
r = r->nxt;
}
}
main()函数的测试数据
#define SIZE 5
int a[SIZE], e;
int main()
{
Node* list=new Node;
list->date = 0;
for (int i = 0; i < SIZE; i++)
a[i] = i + 1;
creatListT(list, a, SIZE);
travelList(list);
//scanf("%d", &e);
//printf("'%d' in List : %d", e, searchElem(list, e));
//alterElem(list, 5, e);
eraseElem(list,6);
travelList(list);
return 0;
}