单链表上运算的实现:
#include<stdio.h>
#include<stdlib.h>
struct Node;
typedef struct Node *PNode;
typedef int DataType;
struct Node{
DataType info;
PNode link;
};
typedef struct Node *LinkList;
LinkList createNullList_link(void) //创建空链表
{
LinkList llist = (LinkList)malloc(sizeof(struct Node));
if(llist!=NULL)llist->link = NULL;
else printf("Out of space!\n");
return llist;
}
int isNullList_link(LinkList llist) //判断链表是否为空
{
return (llist->link == NULL);
}
PNode locate_link(LinkList llist,DataType x) //根据值返回节点位置
{
PNode p;
if(llist == NULL)return NULL;
p = llist->link;
while(p!=NULL && p->info!=x)p = p->link;
return p;
}
int insertPost_link(LinkList llist,PNode p,DataType x) //在节点p后插入值为x的新节点
{
PNode q = (PNode)malloc(sizeof(struct Node));
if(q==NULL){
printf("Out of space!!!\n");
return 0;
}
else
{
q->info = x;
q->link = p->link ;
p->link = q;
return 1;
}
}
int insertPre_link(LinkList llist,PNode p,DataType x) //在节点p前插入值为x的新节点
{
PNode q = (PNode)malloc(sizeof(struct Node));
PNode p_pre = llist->link;
while(p_pre!=NULL && p_pre->link !=p)p_pre = p_pre->link;
if(q==NULL){
printf("Out of space!!!\n");
return 0;
}
else{
q->info = x;
q->link = p_pre->link ;
p_pre->link = q;
return 1;
}
}
PNode locatePre_link(LinkList llist,PNode p) //返回P节点的前驱节点
{
PNode p1;
if(llist == NULL)return NULL;
p1 = llist;
while(p1!=NULL && p1->link!=p)p1=p1->link ;
return p1;
}
int deleteV_link(LinkList llist,DataType x) //根据值删除节点
{
PNode p,q;
p = llist;
if(p == NULL)return 0;
while(p->link!=NULL && p->link->info!=x)
p = p->link;
if(p->link == NULL){
printf("Not exist!\n");
return 0;
}
else{
q = p->link;
p->link = q->link ;
free(q);
return 1;
}
}
int deleteP_link(LinkList llist,PNode p) //根据节点位置进行删除操作
{
PNode p1 = locatePre_link(llist,p);
if(p1!=NULL)
{
p1->link = p->link ;
free(p);
return 0;
}
return 1;
}
void linkprint(LinkList llist){ //打印所有节点的值
PNode p = llist->link;
while(p!=NULL){
printf("%d ",p->info );
p=p->link ;
}
}
int main(){
LinkList llist = createNullList_link();
PNode p1 = llist;
int flag1 = insertPost_link(llist,p1,1);
p1 = p1->link;
int flag2 = insertPost_link(llist,p1,2);
p1 = p1->link;
int flag3 = insertPost_link(llist,p1,3);
p1 = p1->link;
int flag4 = insertPost_link(llist,p1,4);
p1 = p1->link;
int flag5 = insertPost_link(llist,p1,5);
printf("\n");
linkprint(llist);
printf("\n");
int flag6 = deleteV_link(llist,4);
linkprint(llist);
return 0;
}