zoukankan      html  css  js  c++  java
  • C语言实现的单链表

    包括初始化,创建,查询,长度,删除,清空,销毁等操作

    代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    //定义单链表的数据类型
    typedef struct book
    {
    	char name[10];
    	char code[10];
    	float price;
    }book; 
    typedef book Book;
    
    //定义单链表 
    typedef struct LNode
    {
    	Book data;
    	struct LNode *next;
    }LNode,*LinkList;
    
    //初始化
    void InitLNode(struct LNode*L)
    {
    	L=(LNode*)malloc(sizeof(LNode));
    	if (!L)
    	{
    		printf("分配空间出错,初始化失败!");
    		exit(1);
    	}
    	L->next=NULL;
    } 
    
    //头插法,创建单链表 
    LNode* creatList(void)
    {
    	LNode *head;
    	LNode *s;
    	LNode *p;
    	Book c;
    	head=(LNode*)malloc(sizeof(LNode));
    	p=head;
    	p->next=NULL;
        printf("请输入新节点的数据,当最后输入的值小于等于0时建表完成,该值不接入链表
    ");
        scanf("%s%s%f",&c.name,&c.code,&c.price); 
    	while (c.price>0)
    	{
    		s=(LNode*)malloc(sizeof(LNode));
    		s->next=p->next;
    		p->next=s;
    		s->data=c;
    	    printf("请输入书名,编码和价格:
    ");
    		scanf("%s%s%f",&c.name,&c.code,&c.price); 
    	}
    	printf("creatList函数执行,创建链表成功
    ");
    	return head;
    }
    
    //单链表的长度
    int length(struct LNode *L)
    {
    	int i=0;
    	LNode *p;
    	p=L;
    	while (p->next!=NULL)
    	{
    		i++;
    		p=p->next;
    	}
    	return i;
     }
      
     //单链表的插入
     LNode* insertheadList(struct LNode* L,int i,Book b)
     {
         LNode *s,*p;
     	p=L;
     	int j=0;
         if (i<=0)
        {
        	printf("插入越界!
    ");
     	    exit(1);
        }
         while (p->next!=NULL)
        {
     		if (j==i-1)
    	    {
     	    	s=(LNode*)malloc(sizeof(LNode));
     	 	    s->data=b;
     	    	s->next=p->next;
     		    p->next=s;
     		    printf("inserheadList函数执行,在第%d个位置插入了元素
    ",j+1);
     	    	break;
           }
     	   p=p->next;
     	   j++;
        }
    	return L;
      } 
      
    //单链表查询
    Book search(struct LNode*L,int i)
    {
    	int j;
    	Book b;
    	LNode *p;
    	p=L;
    	if (i<0)
    	{
    	   printf("查询的节点越界了!");
    		exit(1); 
    	}
    	j=1;
        while (p->next!=NULL)
        {
       	    p=p->next;
       	    if (j==i)
    	   {
       	    	b=p->data;
       	    	break;
    	   }
       	    j++;
        }
    	return b;
    } 
    
    //单链表的删除
    Book DelList(struct LNode*L,int i)
    {
    	Book b;
    	LNode *s,*p;
    	p=L;
    	int j;
    	if (i<1)
    	{
    		printf("删除越界!
    ");
    		exit(1);
    	}
    	j=0;
    	while (p->next!=NULL)
    	{
    	
    		if (j==i-1)
    		{
    			s=p->next;
    			b=s->data;
    			p->next=s->next;
    			//	printf("删除第%d个节点成功,删除的值为:name:%s,code:%s,price:%d
    ",b.name,b.code,b.price);
    			free(s);
    		}
    		p=p->next;
    		j++;
    	  
    	}
    	return b;
     } 
     
     //清空单链表
      void ClearList(struct LNode*L)
      {
      	LNode *p,*r;
      	p=L;
      	
      	while (p)
      	{
      		p=p->next;
      		r=p;
      		free(p);
      		p=r;
    	  }
      	L->next=NULL;
       } 
       
    //销毁单链表
     void DestroyList(struct LNode*L)
     {
     	LNode *p,*head;
     	head=L;
     	while (head)
     	{
     		p=head->next;
     		free(head);
     		head=p;
    	}
     }
     
    void main()
    {
        LNode L,*Q; 
        Book b;
        int i;
        Q=&L;
     
        InitLNode(&L);
        
        L=*creatList();
        printf("请输入书本的name,code和price:
    ");
        scanf("%s%s%f",&b.name,&b.code,&b.price);
        insertheadList(&L,1,b);
        int y=length(&L);
        printf("单链表的length:%d
    ",y);
      //删除第一个元素
       Book bo= DelList(Q,1); 
       printf("删除了第1个元素,它的name:%s,code:%s,price:%f
    ",bo.name,bo.code,bo.price);
       ClearList(Q);
      printf("清空单链表成功!
    ");
      //按链表的存储顺序输出 
         i=1;
         while (Q->next!=NULL)
        {
             Book book=search(&L,i);
             Q=Q->next;
      	    printf("name:%s,code:%s,price:%f
    ",Q->data.name,Q->data.code,Q->data.price);
      	     i++;
        }
      
    }
    
  • 相关阅读:
    NSString、NSMutableString基本用法
    iOS开发之UITextField的使用详解
    iOS学习—JSON数据解析
    iOS下json的解析 NSJSONSerialization
    NSJSONSerialization介绍
    [iOS经典面试题]用变量a给出下面的定义
    sizeToFit()使用心得
    李洪强-C语言5-函数
    【C语言】10-字符和字符串常用处理函数
    cocos2d-x 2.x 支持多个方向屏幕翻转
  • 原文地址:https://www.cnblogs.com/glory-yl/p/14618696.html
Copyright © 2011-2022 走看看