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

c语言单链表的相关操作

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

c语言单链表的相关操作

1.单链表的初始化

2.尾插法创建单链表

3.输出单链表

4.

#include
typedef struct LNode
{
	char ch;
	struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList &p)
{
	p=new LNode;
	p->next=NULL;//创建一个头结点
	if(NULL!=p) 
	printf("初始化成功n");
}
void CreatList(LinkList &p)
{   int n;
    char ch;
	LinkList r=p;
	r->next=NULL;//创建一个尾指针 
	printf("你想要输入的元素的个数为:n");
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf(" %c",&ch);
		LinkList q=new LNode;
		q->ch=ch;
		r->next=q;
		q->next=NULL;// 将元素插在尾指针的后面 
		r=q;//尾指针指向当前单链表中最后一个元素 
	}
	
 }//尾插法创建单链表 
 void ShowList(LinkList &p)
 {
 	if(NULL==p->next)
 	printf("当前单链表中没有元素n");
 	else
 	{   
 	    printf("当前单链表中元素为:n");
 		LinkList q=p->next;//再定义一个指向头指针的变量,每次移动该变量以防头指针移动使单链表中元素丢失 
 		while(NULL!=q)
 		{
 	     printf("%c ",q->ch);
 	     q=q->next;
		  } 
		  printf("n");
	 }
 }
 void IsEmpty(LinkList p)
 {
 	if(NULL==p->next)
 	{
 		printf("当前单链表为空n");
	 }
	 else
	 printf("不为空n");
 }//判断是否为空 
 int ListLength(LinkList p)
 { 
    int len=0;
    LinkList q=p->next;
    while(NULL!=q)
    {
    	len++;
    	q=q->next;
	}
   return len;
 }//求单链表长度 
 void GetElem(LinkList p)
 {  int i=0;
 	int pos;
 	LinkList q=p; 
 	printf("你想要输出第几个元素:n");
 	scanf("%d",&pos);
 	while(NULL!=q&&inext;
	 }
	 printf("%c ",q->ch);
	 if(NULL==q||i>pos)//NULL==q表示输入的位置大于单链表的长度,i>pos表示输入的位置小于1 
	 {
	 	printf("输入位置错误n");
	 }
 }
 int FindElem(LinkList p)
 {
 	char ch;
 	printf("你想要查找的元素为:n");
 	scanf(" %c",&ch);
 	LinkList q=p->next;
 	int pos=0;
 	while(NULL!=q&&q->ch!=ch)
 	{
 		pos++;
 		q=q->next;
	 }
	 if(NULL==q)
	 {
	 	printf("不存在该元素n");
	 }
	 return pos;
 }
 void InsertList(LinkList &p)
 {  int i=0;
 	char ch;
 	int pos;
 	printf("你想要插入的元素和位置为:n");
 	scanf(" %c",&ch);
 	scanf("%d",&pos);
 	LinkList q=p;
 	while(q&&inext;
 		i++;
	  } 
	  if(!q||i>pos-1)
	  {
	  	printf("插入位置错误n");
	  }
	  LinkList q1=new LNode;
	  if(NULL==q1)
	  {
	  	printf("内存分配失败n");
	  }
	  q1->ch=ch;
	  q1->next=q->next;
	  q->next=q1;
	  
 }
 void DeleteElem(LinkList &p) 
 {  
    int i=0;
 	int pos;
 	printf("请输入想要删除的元素的位置:n");
 	scanf("%d",&pos);
 	LinkList q=p;
 	while(NULL!=q&&inext;
 		i++;
	 }
	 if(!q||i>pos-1)
	 {
	 	printf("输入位置错误n");
	 }
	 LinkList q2=q->next;
	 q->next=q2->next;
	 delete q2;
 }
 void ReversList(LinkList &p)
 {  printf("翻转后的链表:n");
 	LinkList p1,p2;
 	p1=p->next;
 	p->next=NULL; 
 	while(NULL!=p1)
 	{
 		p2=p1->next;
 		p1->next=p->next;
 		p->next=p1;
 		p1=p2;
	  } 
 }
 int main()
{
	LinkList p;
    InitList(p);
    CreatList(p);
    ShowList(p);
    IsEmpty(p);
    int len=ListLength(p);
    printf("长度为:%dn",len);
    GetElem(p); 
    int pos=FindElem(p);
    printf("元素所在位置为:%dn",pos);
    InsertList(p);
    ShowList(p);
    DeleteElem(p);
    ShowList(p);
    ReversList(p);
    ShowList(p);
}

求单链表的长度

5.判断单链表是否为空

6.输出某个位置的元素

7.求元素所在位置

8.插入元素

9.删除元素

10.原地逆转

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849922.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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