代码示例
#include<malloc.h>
#include<stdio.h>
typedef struct LNode{ //链表结构体
int data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList; //别名
//头插法建立链表
bool Link_HeadInsert(LinkList &L,int x){
printf("头插法!\n");
LNode *s; //待插入结点
s=(LNode *)malloc(sizeof(LNode)); //分配空间
s->data=x; //赋值数据
s->next=L->next; //插入操作
L->next=s;
return true;
}
//尾插法建立链表
LinkList List_TailInsert(LinkList &L){
int x;
L=(LinkList)malloc(sizeof(LNode));
LNode *s,*r;
scanf("%d",&x);
while(x!=9999){
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
return L;
}
//初始化链表
void InitList(LinkList &L){
L=(LinkList)malloc(sizeof(LNode)); //头结点分配空间
L->next=NULL; //头结点后接空
Link_HeadInsert(L,1); //头插法
Link_HeadInsert(L,2);
Link_HeadInsert(L,3);
}
//按序号查找结点值
LNode *GetElem(LinkList L,int n){
int j=1; //记录序号
LNode *p=L->next; //工作指针
if(n==0) //如果是头结点
return L;
if(n<0) //如果数据不正确
return NULL;
while(p!=NULL&&j<n){ //遍历查找
p=p->next;
j++;
}
return p; //返回结点指针p
}
//按值查找结点
LNode *LocateElem(LinkList L,int x){
LNode *p=L->next; //工作指针
while(p!=NULL&&p->data!=x) //遍历查找
p=p->next;
return p; //返回结点指针p
}
//插入结点操作
bool InsertElem(LinkList &L,int n,int x){
printf("插入操作!\n");
LNode *s; //创建待插入结点
s=(LNode *)malloc(sizeof(LNode)); //给结点分配空间
s->data=x; //赋值
LNode *p=GetElem(L,n-1); //找到待插入结点的前驱结点p
s->next=p->next; //插入操作
p->next=s;
return true;
}
//删除结点操作
bool DeleteElem(LinkList &L,int n){
printf("删除操作!\n");
LNode *p=GetElem(L,n-1); //找到待删除结点的前驱结点p
LNode *q=p->next; //q为待删除结点
p->next=q->next; //删除操作
free(q); //释放空间
return true;
}
//求表长
int GetLength(LinkList L){
int j=1; //记录个数
LNode *p=L->next; //工作指针
while(p!=NULL){ //遍历
p=p->next;
j++;
}
return j; //返回表长
}
//输出表
void PrintList(LinkList &L){
LNode *p=L->next;
while(p!=NULL){
printf("%d\t",p->data);
p=p->next;
}
printf("\n---------分隔线--------\n");
}
int main(){
LinkList L; //创建链表
InitList(L); //初始化链表
PrintList(L); //输出表
LNode *p; //定义结点
p=GetElem(L,2); //按序号查找结点值
printf("第2个结点值为%d\n",p->data);
p=LocateElem(L,2); //按值查找结点
printf("\n");
printf("值2的后面的结点是%d\n",p->next->data);
printf("\n");
InsertElem(L,2,4); //在第2个位置插入数据4
PrintList(L);
printf("\n");
DeleteElem(L,2); //删除数据2
PrintList(L);
}
运行结果