带头结点单链表的基本操作

/*单链表*/
#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct LNode{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;
bool InitList(LinkList &L)	//初始化单链表
{
	L=(LNode*)malloc(sizeof(LNode));
	if(L==NULL)
		return false;
	L->next=NULL;
	return true;
}
LinkList head_InsertList(LinkList &L)	//头插法建立单链表
{
	ElemType e;
	printf("please input some number:");
	scanf("%d",&e);
	while(e!=-1)
	{
		LNode *s=(LNode*)malloc(sizeof(LNode));
		s->data=e;
		LNode *p=L;
		s->next=p->next;
		p->next=s;
		scanf("%d",&e);
	}
	return L;
}
LinkList tail_InsertList(LinkList &L)	//尾插法建立单链表
{
	ElemType e;
	LNode *p=L;
	printf("please input some number:");
	scanf("%d",&e);
	while(e!=-1)
	{
		LNode *s=(LNode*)malloc(sizeof(LNode));
		s->data=e;
		p->next=s;
		p=s;			//p始终指向尾部
		scanf("%d",&e);
	}
	p->next=NULL;
	return L;
}
bool InsertList(LinkList &L,ElemType i,ElemType e)	//插入节点操作
{
	if(i<1)
		return false;
	LNode *p=L;
	int j=0;		//当前p指针位置
	while(p!=NULL && j<i-1)		//找到位置是第i-1的节点
	{
		p=p->next;
		j++;
	}
	if(p==NULL)
		return false;
	LNode *s=(LNode*)malloc(sizeof(LNode));
	s->data=e;
	s->next=p->next;
	p->next=s;
	return true;
}
bool DeleteList(LinkList &L,ElemType i)	//删除节点操作
{
	if(i<1)
		return false;
	LNode *p=L,*q=L->next;
	int j=0;
	while(q!=NULL && j<i-1)
	{
		p=q;
		q=q->next;
		j++;
	}
	if(q==NULL)
		return false;
	p->next=q->next;
	free(q);
}
LNode * getElem1(LinkList L,ElemType i)		//按位查找节点
{
	if(i<0)
		return NULL;
	int j=0;
	LNode *p=L;
	while(j<i && p!=NULL)
	{
		p=p->next;
		j++;
	}
	return p;
}
LNode * getElem2(LinkList L,ElemType e)		//按值查找节点
{
	if(L==NULL)
		return NULL;
	LNode *p=L->next;
	while(p!=NULL && p->data!=e)
		p=p->next;
	return p;
}
void Print(LinkList L)		//输出单链表
{
	LNode *p=L->next;
	while(p!=NULL)
	{
		printf("%d\n",p->data);
		p=p->next;
	}
}
		
void main()
{
	LinkList L;
	InitList(L);
	head_InsertList(L);
	Print(L);
	printf("************\n");
	DeleteList(L,2);
	Print(L);
	printf("************\n");
	InsertList(L,2,100);
	Print(L);
	printf("************\n");
	printf("%d\n",getElem1(L,3)->data);
	printf("************\n");
	printf("%d\n",getElem2(L,100)->data);
	printf("************\n");
}

  

posted @ 2020-06-18 21:25  石乐智先生  阅读(372)  评论(0编辑  收藏  举报