typedef struct LNode{
Elemtype data;
struct Lnode *next;
}*LinkList,LNode;
1、创建单链表(头插法)
LinkList creatLinkListByHead(LinkList &L){
L = (LinkList)malloc(sizeof(LNode));
L -> next = NULL;
int x;
scanf("%d",&x);
while(x != 99999){
LNode *s = (LNode *)malloc(sizeof(LNode));
s -> data = x;
s -> next = L -> next;
L -> next = s;
scanf("%d",&x);
}
return L;
}
2、创建单链表(尾插法)
LinkList creatLinkListByRear(LinkList &L){
L = (LinkList)malloc(sizeof(LNode));
L -> next = NULL;
int x;
LinkList *p = L;//工作指针
scanf("%d",&x);
while(x != 99999){
LNode *s = (LNode *)malloc(sizeof(LNode));
s -> data - x;
s -> next = NuLL;
p -> next = s;
p = s;
scanf("%d".&x);
}
return L;
}
3、查找第i个位置的元素
LNode *getElemByPos(LinkList L,int i){
if(i == 0){
return L;
}
if(i < 1){
return NULL;//无效
}
int j = 1;
LNode *p = L -> next;//工作指针
while(L != NULL && j < i){
P = P -> next;
j ++;
}
return P;
}
4、按值查找元素
LNode *locateElemByValue(LinkList L,Element e){
if(L -> next == NULL){
return ;
}
LNode *p = L -> next;
if(p -> data != e || p != NULL){
p = p -> next;
}
return p;
}
5、插入结点
void insertNode(LinkList L,int i,Elemtype e){
if(i < 1 || i > Length(L) + 1){
return ;
}
LNode *p = getElemByPos(L,i - 1);//找到插入的前一个
LNode *s = (LNode *)malloc(sizeof(LNode));
s -> data = e;
s -> next = p -> next;
p -> next = s;
}
6、删除结点
bool deleteNode(LinkList L,int i,Elemtype &e){
if(i < 1 || i > length(L)){
return false;
}
LNode *p = getElemByPose(L,i-1);
LNode *q = p -> next;
e = q -> data;
p -> next = q -> next;
free(q);
return true;
}
7、双链表头结点类型描述
typedef struct DNode{
ElemType data;
struct DNode *prior;
*next;
}DNode,*DLinkList;
8、双链表的插入
//p之后插入s
s -> next = p -> next;
s -> prior = p;
p -> next -> prior = s;
p -> next = s;
9、双链表的删除
//删除p之后的结点q
p -> next = q -> next;
q -> next -> prior = q -> prior;
free(q);
10、静态链表的类型描述
#define MaxSize 50
typedef struct{
Elemtype data;
int next;
}SLinkList[MaxSize];