zoukankan      html  css  js  c++  java
  • 单链表的运算实现

    线性表的链式存储结构——链表,包含单链表、双链表、循环链表等。单链表的结点由数据元素和指向下一个结点的指针构成,是最简单的一种链表结构。

    对单链表的操作非常多,如查找、插入、删除、逆置、打印等,现对这些操作的实现做一个小结,代码用C语言实现。

    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct LNode
    {
    	char data;
    	struct LNode *next;
    }LinkList;
    
    extern LinkList *CreatListF();//头插法
    extern LinkList *CreatListE();//尾插法
    extern int LocateList(LinkList *head, char e);//查找结点
    extern LinkList *InsertList(LinkList *&head, int i, char e);//插入结点
    extern LinkList *DeleteList(LinkList *&head, int i, char &e);//删除结点
    extern int LengthList(LinkList *head);//计算链表的长度
    extern void PrintList(LinkList *head);//打印链表
    extern LinkList *ReverseList(LinkList *&head);//逆置链表
    
    LinkList *CreatListF()
    {
    	LinkList *head,*p;
    	char str[10];
    	int i;
    	head=(LinkList *)malloc(sizeof(LinkList));
    	head->next=NULL;
    	printf("please input a string:");
    	gets(str);
    	for(i=0;str[i]!='';i++)
    	{
    		p=(LinkList *)malloc(sizeof(LinkList));
    		p->data=str[i];
    		p->next=head->next;
    		head->next=p;
    	}
    	return head;
    }
    
    LinkList *CreatListE()
    {
    	LinkList *head,*p,*q;
    	char str[10];
    	int i;
    	head=(LinkList *)malloc(sizeof(LinkList));
    	head->next=NULL;
    	q=head;
    	printf("please input a string:");
    	gets(str);
    	for(i=0;str[i]!='';i++)
    	{
    		p=(LinkList *)malloc(sizeof(LinkList));
    		p->data=str[i];
    		q->next=p;
    		q=p;
    	}
    	q->next=NULL;
    	return head;	
    }
     
    int LocateList(LinkList *head, char e)
    {
    	LinkList *p=head->next;
    	int i=1;
    	while(p!=NULL && p->data != e)
    	{
    		p=p->next;
    		i++;
    	}
    	if(NULL==p)
    	{
    		printf("NO Found Node
    ");
    		return 0;
    	}
    	else
    		return i;
    }
    
    LinkList *InsertList(LinkList *&head, int i, char e)
    {
    	LinkList *p,*q;
    	int j=0;
    	p=head;
    	while(j<i-1 && p!=NULL)
    	{
    		j++;
    		p=p->next;
    	}
    	if(NULL==p)
    	{
    		printf("No Found Node %d!
    ",i);
    		exit(0);
    	}
    	q=(LinkList *)malloc(sizeof(LinkList));
    	q->data=e;
    	q->next=p->next;
    	p->next=q;
    	return head;
    }
    
    LinkList *DeleteList(LinkList *&head, int i, char &e)
    {
    	LinkList *p,*q;
    	int j=0;
    	p=head;
    	while(j<i-1 && p!=NULL)
    	{
    		j++;
    		p=p->next;
    	}
    	if(NULL==p)
    	{
    		printf("No Found Node %d!
    ",i);
    		exit(0);
    	}		
    	else
    	{
    		q=p->next;
    		if(NULL==q)
    		{
    			printf("NO Found");
    			exit(0);
    		}
    		e=q->data;
    		p->next=q->next;
    		free(q);
    		return head;
    	}
    }
    
    int LengthList(LinkList *head)
    {
    	LinkList *p;
    	int n=0;
    	p=head->next;
    	while(p!=NULL)
    	{
    		++n;
    		p=p->next;
    	}
    	return n;
    }
    
    void PrintList(LinkList *head)
    {
    	LinkList *p;
    	p=head->next;
    	while(p)
    	{
    		printf("%c",p->data);
    		p=p->next;
    	}
    	printf("
    ");
    }
    
    LinkList *ReverseList(LinkList *&head)
    {
    	LinkList *p,*q;
    	if(head->next && head->next->next)//链表不为空或单结点
    	{
    		p=head->next;
    		q=p->next;
    		p>next-=NULL;//将结点变成终端结点
    		while(q!=NULL)
    		{
    			p=q;
    			q=q->next;
    			p->next=head->next;
    			head->next=p;
    		}
    		return head;
    	}
    	return head;//假设是空表或单结点表,直接返回head
    }

  • 相关阅读:
    Homebrew替换源
    Tensorboard on Server
    locale.Error: unsupported locale setting(ViZDoom执行错误)
    Python之从numpy.array保存图片
    医院汇总
    Ubuntu上CUDA环境搭建
    图片
    高斯分布与Gamma分布关系
    Python之2维list转置、旋转及其简单应用
    如何让 zend studio 10 识别 Phalcon语法并且进行语法提示
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3954369.html
Copyright © 2011-2022 走看看