一、单链表
1.结构定义
typedef struct LNode {
int data;
struct LNode* next;
}LNode, * LinkList;
2.功能实现
①创造结点
//创造结点
LNode* NewNode(int x) {
struct LNode* ret = (LNode*)malloc(sizeof(LNode));
ret->data = x;
ret->next = NULL;
return ret;
}
②插入节点
//增
//头插
bool L_PushFront(LinkList* L,int x)
{
if (*L == NULL){
*L = NewNode(x);
return true;
}
LNode* tmp = NewNode(x);
tmp->next = *L;
*L = tmp;
return 0;
}
//尾插
bool L_PushBack(LinkList* L,int x)
{
if (*L == NULL) {
*L = NewNode(x);
return true;
}
LNode* cur = *L;
while (cur->next != NULL)
{
cur = cur->next;
}
LNode* tmp = NewNode(x);
cur->next = tmp;
return true;
}
③删除节点
//删
//头删
int L_PopFront(LinkList* L)
{
if ((*L) == NULL)
return 0;
LNode* tmp = (*L);
int ret = tmp->data;
*L = (*L)->next;
free(tmp);
return ret;
}
//尾删
int L_PopBack(LinkList* L)
{
if ((*L) == NULL)
return 0;
if ((*L)->next == NULL){
int ret = (*L)->data;
free(*L);
*L = (*L)->next;
return ret;
}
LNode* cur = *L;
while (cur->next->next)
{
cur = cur->next;
}
LNode* tmp = cur->next;
int ret = tmp->data;
free(tmp);
cur->next = NULL;
return ret;
}
④查询第n个结点的值
//查
//查询第n个元素的值
int L_Selectn(LinkList L, int n)
{
if (L == NULL || n <= 0)
return 0;
LNode* cur = L;
while (--n)
{
cur = cur->next;
}
if (cur == NULL)
return 0;
return cur->data;
}
⑤遍历打印
//遍历打印
void L_Print(LinkList L)
{
LNode* cur = L;
while (cur != NULL)
{
printf("%d ", cur->data);
cur = cur->next;
}
printf("\n");
}
⑥主函数
int main()
{
LinkList L = NULL;
L_PushFront(&L, 3);
L_PushFront(&L, 2);
L_PushFront(&L, 1);
L_PushBack(&L, 4);
L_Print(L);
L_PopFront(&L);
L_Print(L);
L_PopBack(&L);
L_Print(L);
printf("%d\n", L_Selectn(L, 1));
printf("%d\n", L_Selectn(L, 2));
return 0;
}
3.效果图
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 单链表-数据结构
发表评论 取消回复