C语言数据结构代码实现——单链表(一)

本文分享如何创建单链表,单链表赋值,删除单链表,显示单链表

#include"stdio.h"  
#define ElemType int
#include
typedef struct LNode
{
	ElemType data;         //数据域
	struct LNode *next;    //指针域
}LNode, * LinkList;

//初始化链表 
void InitList(LinkList &L)
{
 L = new LNode;        //生成头结点
 L->next = NULL;
}

//链表插入元素 
void ListInsert(LinkList &L,int i,ElemType e)
{
	LNode* s;
	LinkList p=L;
	int j=0;
	while(p&&(j<i-1))//j指到i-1位置或者p已经到最后时跳出
	{
	 p=p->next;
	 ++j;
	}
	if(!p||j>i-1)//i<1或者i>ListLength(L)+1时,插入位置无效 不调用ListLength,提高效率
	{
		printf("插入位置无效!!!\n");
	}
	s=new LNode;
	s->data=e;
	s->next=p->next;
	p->next=s;
}

//生成10个随机数的链表 
void testData(LinkList &L)
{
	for(int i=1;i<=10;i++)
	{
		ListInsert(L,i,rand()%11);
	}
}

//计算链表长度 
int ListLength(LinkList L)
{
	LinkList p=L;int sum=0;
	while(p)
	{
	 sum++;
	 p=p->next;
	}
	return sum-1;//去除头结点
}

//显示链表 
void PrintList(LinkList L)
{
	LinkList p=L->next;//跳过头结点
	if(ListLength(L))
	{
		printf("当前单链表所有元素:");
		while(p)
		{
			printf("%d ",p->data);
			p=p->next;
		}
		printf("\n");
	}
	else
	{
		printf("当前单链表已空!\n");
	}
}

void ListDelete(LinkList &L,int i)
{
 	LNode* s;
	LinkList p=L;
	int j=0;
	LinkList q;
	while(p&&(j<i-1))//j指到i-1位置
	{
	 p=p->next;
	 ++j;
	}
	if(!(p->next)||j>i-1)   //i<1或者i>ListLength(L)时,删除位置无效
	{
		printf("删除位置无效!!!\n");
	}
	q=p->next;
	p->next=q->next;
	free(q);//释放空间
}

int main()
{
	LinkList L;
 	InitList(L);   //初始化链表 
 	testData(L);   //为链表赋值 
 	PrintList(L);  //显示 
 	ListDelete(L,2); //删除i=2的元素 
 	PrintList(L);    //显示 
}

代码运行结果
C语言数据结构代码实现——单链表(一)_第1张图片

你可能感兴趣的:(数据结构C语言)