typedef int ElementType;
typedef struct LNode* LinkList;
typedef struct LNode* PtrToNode;
typedef struct LNode
{
ElementType data;
PtrToNode next;
} LNode;
LinkList CreateLinkList(int n); //创建长度为n的单链表
PtrToNode FindByPos(LinkList l, int pos); //根据指定位置查找节点
PtrToNode FindByValue(LinkList l, ElementType value); //根据指定值查找节点
void Insert(LinkList l, ElementType x, int pos); //于指定位置插入
void Delete(LinkList l, int pos); //删除指定位置节点
LinkList CreateLinkList(int n){
LinkList l;
PtrToNode tmpCell, tail;
l = (LinkList*)malloc(sizeof(LNode));
l->next = NULL;
ElementType data;
for(int i = 0; i < n; i++){
scanf("%d", &data);
tmpCell = (PtrToNode)malloc(sizeof(LNode));
tmpCell->data = data;
tmpCell->next = NULL;
if(i == 0)
l->next = tmpCell;
else
tail->next = tmpCell;
tail = tmpCell;
}
return l;
}
PtrToNode FindByPos(LinkList l, int pos)
{
int i = 1;
LinkList p = l->next;
while(p && i < pos)
{
p = p->next;
i++;
}
if(i == pos)
return p;
return NULL;
}
PtrToNode FindByValue(LinkList l, ElementType value)
{
LinkList p = l->next;
while(p && p->data != value)
p = p->next;
return p;
}
void Insert(LinkList l, ElementType x, int pos)
{
PtrToNode node = (PtrToNode)malloc(sizeof(LNode));
node->data = x;
node->next = NULL;
if(pos == 1)
{
node->next = l->next;
l->next = node;
}
else
{
PtrToNode pre = FindByPos(l, pos - 1);
if(!node)
return;
else
{
node->next = pre->next;
pre->next = node;
}
}
}
void Delete(LinkList l, int pos){
PtrToNode tmpCell;
if(pos == 1){
tmpCell = l->next;
l->next = tmpCell->next;
}
else{
PtrToNode pre = FindByPos(l, pos - 1);
if(!pre || !pre->next)
return;
else{
tmpCell = pre->next;
pre->next = tmpCell->next;
}
}
free(tmpCell);
tmpCell = NULL;
}
线性表_单链表的基本操作
猜你喜欢
转载自blog.csdn.net/hang981601026/article/details/82942452
今日推荐
周排行