下面是用c语言实现的一些单链表的基本操作:
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int elem;
struct LNode *next;
}LNode, *LinkList;
/*单链表得初始化*/
LinkList CreatList()
{
LinkList p = (LNode *) malloc(sizeof(LNode)); //定义一个头节点
LinkList temp = p; //声明一个指针指向头节点
for(int i=1;i<=5;i++)
{
LinkList q = (LNode *) malloc(sizeof(LNode));
q->elem = i;
q->next = NULL;
temp->next = q;
temp = q;
}
return p;
}
/*单链表的插入*/
LinkList InsertElem(LinkList &L, int e, int pos)
{
LinkList temp = L;
/*首先要找到插入节点的上一个节点*/
for(int i=1;i<pos;i++)
{
if(temp == NULL)
{
printf("插入位置无效!");
return L;
}
temp = temp->next;
}
LinkList p = (LNode *)malloc(sizeof(LNode));
p->elem = e;
p->next = temp->next;
temp->next = p;
return L;
}
/*单链表的指定位置元素删除*/
LinkList DelElem(LinkList &L, int e)
{
LinkList temp = L;
/*先找到要被删除的上一个节点*/
for(int i=1; i < e; i++)
{
temp = temp->next;
if(temp == NULL)
{
printf("删除的位置无效!\n");
return L;
}
}
LinkList del = temp->next;
temp->next = del->next;
free(del);
return L;
}
/*单链表的查找*/
int selectElem(LinkList L, int e)
{
LinkList temp = L;
int i = 1;
while(temp->next!=NULL)
{
temp = temp->next;
if(temp->elem == e)
return i;
i++;
}
return -1;
}
/*单链表的指定位置修改*/
LinkList ModifyElem(LinkList &L, int pos, int e)
{
LinkList temp = L;
/*先找到下标为pos的节点*/
for(int i=1;i<=pos;i++)
{
temp = temp->next;
if(temp == NULL)
printf("位置信息无效!");
}
temp->elem = e;
return L;
}
/*单链表的输出*/
void display(LinkList L)
{
LinkList temp = L;
while(temp->next!=NULL)
{
temp = temp->next;
printf("%d->",temp->elem);
}
printf("NULL\n");
}
int main()
{
printf("初始化链表为:\n");
LinkList L;
L = CreatList();
display(L);
printf("\n在第4个位置插入元素100:\n");
L = InsertElem(L, 100, 4);
display(L);
printf("\n删除第3个位置的元素:\n");
L = DelElem(L, 3);
display(L);
printf("\n查找元素100的下标:\n");
int pos = selectElem(L, 100);
if(pos == -1)
{
printf("没有查到该元素!\n");
}
else
printf("位置下标为:%d\n", pos);
printf("\n将下标为4的元素更改为1000\n");
L = ModifyElem(L, 4, 1000);
display(L);
system("pause");
return 0;
} ```