栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

线性表之链表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线性表之链表

#define _CRT_SECURE_NO_ 
#include
#include

typedef int ElemType;
typedef struct LNode{
	ElemType data;
	struct LNode *next;//指向下一结点 	
}LNode,*LinkList;
//头插法新建链表
LinkList CreatList(LinkList &L)//list_head_insert
{
	LNode *s;int x;
	L=(LinkList)malloc(sizeof(LNode));//带头结点的链表
	L->next=NULL;//L->data里边没有放东西
	scanf("%d",&x);//从标准输入读取数据;
	//3 4 5 6 7 9999
	while(x!=9999){
		s=(LNode*)malloc(sizeof(LNode));//申请一个新空间给S,强制类型转换
		s->data=x;//把读取到的值,给新空间中的data成员
		s->next=L->next;//让新结点的next指针指向链表的第一个元素 
		L->next=s;//让s作为第一个元素 
		scanf("%d",&x);//读取标准输入 
	} 
	return L;
 } 
 //尾插法新建链表
 LinkList CreatList2(LinkList &L)//list_tail_insert
 {
 	int x;
 	L=(LinkList)malloc(sizeof(LNode));//带头结点的链表
	 LNode *s,*r=L;//结构体指针LinkList s,r=L也可以,r代表表尾结点尾部 
	 //3 4 5 6 7 9999
	 scanf("%d",&x);
	 while(x!=9999)
	 {
	 	s=(LNode*)malloc(sizeof(LNode));
	 	s->data=x;
	 	r->next=s;//让尾部结点指向新结点 
	 	r=s;//r指向新的表尾结点
		scanf("%d",&x); 
	  } 
 	r->next=NULL;//尾结点的next指针赋值为NULL
	return L; 
  } 
  //查找第几个结点的值 
 LNode *GetElem(LinkList L,int i)
 {
 	int j=1;
 	LNode *p=L->next;
 	if(i==0)
 	{
 		return L;
	 }
	if(i<1)
	{
		return NULL;
	}
	while(p&&j
		p=p->next;
		j++;
	}
	return p;
 }
 //按值查找
 LinkList LocateElem(LinkList L,ElemType e)
 {
 	LinkList p = L->next;
 	while(p!=NULL&&p->data!=e)
 	{
 		p=p->next;
	 }
	 return p;
 }
 //新结点插入第i个位置
 bool ListFrontInsert(LinkList L,int i,ElemType e)
 {
 	LinkList p=GetElem(L,i-1);//拿到要插入位置的前一个位置的地址值 
 	if(NULL==p)
 	{
 		return false;//i不对 
	 }
	LinkList s=(LNode*)malloc(sizeof(LNode));//为新插入的结点申请空间
	s->data=e;
	s->next=p->next;
	p->next=s;
	return true; 
  } 
  //删除指定的结点的元素
  bool ListDelete(LinkList L,int i)
  {
  	LinkList p=GetElem(L,i-1);
  	if(NULL==p)
  	{
  		return false;
	  }
	LinkList q=p->next;
	p->next=q->next;//断链 
	free(q);//释放对应的结点空间 
	q=NULL;//为了避免野指针 
	return true; 
   } 
 //打印链表 
 void PrintList(LinkList L)
 {
 	L->next;
 	while(L!=NULL)
 	{
 		printf("%3",L->data);//打印当前结点数据 
 		L=L->next;//指向下一结点 
	 }
	printf("n");
 }
 int main()
 {
 	LinkList L;//链表头,是结构体指针类型
	LinkList search;//用来储存拿到的某一个结点
	CreatList(L);//输入数据可以为3 4 5 6 7 9999
	//CreatList2(L);//输入数据可以为3 4 5 6 7 9999
	PrintList(L);//链表打印 
	search=GetElem(L,2);//查找链表第二个位置的元素值 
	if(search!=NULL)
	{
		printf("按序号查找成功");
		printf("%dn",search->data); 
	 } 
	search=LocateElem(L,6);//按值查询
	if(search!=NULL)
	{
		printf("按值查找成功n");
		printf("%dn",search->data);
	} 
	ListFrontInsert(L,2,99);//新结点插入第i个位置
	PrintList(L);
	ListDelete(L,4);//删除第4个结点
	PrintList(L); 
 }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/980274.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号