C语言实现带头结点的链表的创建、查找、插入、删除操作语言实现带头结点的链表的创建、查找、插入、删除操作
主要介绍了C语言实现带头结点的链表的创建、查找、插入、删除操作方法,对于了解数据结构中链表的各项操
作有很好的借鉴价值,需要的朋友可以参考下
本文实例讲述了C语言实现带头结点的链表的创建、查找、插入、删除操作。是数据结构中链表部分的基础操作。分享给大家
供大家参考。具体方法如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node* next;// 这个地方注意结构体变量的定义规则
} Node, *PNode;
Node* createLinklist(int length)
{
int i = 0;
PNode pHeader = NULL;
PNode pTail = NULL;
PNode pTemp = NULL;
printf("create");
pHeader = (PNode)malloc(sizeof(Node));// 申请头结点
if (!pHeader)
{
exit(-1);
}
pHeader->next = NULL;
for (i = 0; i < length; i++)
{
pTemp = (PNode)malloc(sizeof(Node));// 用malloc要包含头文件
if (!pTemp)
{
exit(-1);
}
pTemp->data = i*10;
pTemp->next = NULL;
if (!pHeader->next)
{
// 第一个结点是空的,则先连接第一个结点
pHeader->next = pTemp;
}
else
{
pTail->next = pTemp;
}
pTail = pTemp;
}
return pHeader;
}
Node* search(PNode pHeader, int k)
{
PNode p = pHeader->next;
int i = 1;
printf("search");
while(p && (i < k))
{
p = p->next;
i++;
}
if (p && (i == k)) // 这步的i == k是必须的,
// 因为如果一开始的时候 i就 >= k并且pHeader->next还不为NULL这一步就会必过,导致返回的是第一个元素的值
{
return p;
}
return NULL;
}
int insert(PNode pHeader, PNode pNew, int k)
{
PNode p = NULL;
printf("insert");
if ( 1 == k )