您好,欢迎来到99网。
搜索
您的当前位置:首页单链表操作————C语言描述

单链表操作————C语言描述

来源:99网

单链表上运算的实现:

#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;
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务