线性表(Linear List)
由同类型数据元素构成的有序序列的线性结构
无头结点的线性链表
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode *PtrToLNode;
struct LNode {
ElemType Data;
PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;
//List Insert(int i, ElemType X, List L);
//根据值查找节点
//X是要查询的值,L是链表的头指针
Position FindData(ElemType X, List L)
{
List p = L;
while(p->Data != X && p)
p = p->Next;
if(p)
return p;
else
return NULL;
}
//根据序号查找
//N是要查询的序号值,L是链表的头指针
Position FindNth(int N, List L)
{
List p = L;
int i = 1;
while(p && i < N)
{
p = p->Next;
i++;
}
if(i == N)
return p;
else
return NULL;
}
//根据序号插入
//在第i个节点插入一个值为X的新节点
//由于该链表没有头结点,当链表为空或在第一个节点前插入新节点,会导致头指针指向改变,所以函数返回类型为List
List Insert(int i, ElemType X, List L)
{
int j = 1;
List s, p = L;
//插入位置在第一个节点前
if(i == 1)
{
s = (List)malloc(sizeof(struct LNode));
s->Data = X;
s->Next = p;
return s;
}
//该循环结束有三种可能
//1.(p==NULL && j<i-1)
//2.(p!=NULL && j>=i-1)
//3.(p==NULL && j>=i-1)
while(p && j < i-1