首页 > 其他 > 详细

单链表那点事

时间:2019-05-03 19:26:29      阅读:112      评论:0      收藏:0      [点我收藏+]

单链表概述

  单链表是一种数据存储机构,结构由数据和指向下一个数据的指针组成。结构体代码如下:

技术分享图片
typedef  struct  LNode
{      DataType data;
struct   LNode  *next;
} LNode,  *LinkList;
View Code

单链表的特点

  单链表的特性具有插入,删除快,查找慢的特点。

创建连表

 

LinkList CreateListHead();
void Insert(LinkList l, int position );
void Remove(LinkList l,int position );
void PrintList(LinkList l);
void putChar(char c){printf("%c",c);}
int  getLength(LinkList l){
    int len=0;
    LinkList pNow ;
    pNow=l;
    while(pNow->next!=NULL){len++; pNow=pNow->next;}
    return len;
}

删除代码

 

//delete data from list
void Remove (LinkList l,int position ){
    LinkList pNow=l;
    for(int i =0;i<position -1;i++){
        pNow=pNow->next;
    }
    pNow->next=pNow->next->next;
    
}

插入代码

void insert(LinkList  l,char c,int position ){
    if(position <0||position >getLength(l)) puts("illegal parameter");
    else {
        LinkList pNow =l;
        for(int i =0; i< position-1 ; i++){
            pNow=pNow->next;
        }
        LinkList temp=(LinkList ) (malloc (sizeof(LNode)));
        temp->data=c;
        temp->next=pNow->next;
        pNow->next=temp; 
    }
    
}

获取链表长度

int  getLength(LinkList l){
    int len=0;
    LinkList pNow ;
    pNow=l;
    while(pNow->next!=NULL){len++; pNow=pNow->next;}
    return len;
}

输出链表中的数据

void PrintList(LinkList L)
{LinkList pNow =(LinkList )(malloc (sizeof(LNode)));
pNow =L;
while(pNow->next!=NULL){
    putChar(pNow->next->data);
    pNow=pNow->next;}
puts("");
}


 完整代码如下

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//指定使用的结构体
typedef char DataType;
typedef  struct  LNode
{      DataType data;
struct   LNode  *next;
} LNode,  *LinkList;
LinkList CreateListHead();
void Insert(LinkList l, int position );
void Remove(LinkList l,int position );
void PrintList(LinkList l);
void putChar(char c){printf("%c",c);}
int  getLength(LinkList l){
    int len=0;
    LinkList pNow ;
    pNow=l;
    while(pNow->next!=NULL){len++; pNow=pNow->next;}
    return len;
}
 //create a list 
LinkList CreateListHead()//头插法创建单链表
{        LinkList  L=(LinkList)malloc(sizeof(LNode)); 
    LinkList p;
    L->next=NULL;
    LinkList pNow =(LinkList )(malloc(sizeof(LNode)));
    //带头结点
    pNow =L;
    char ch;
    while((ch=getchar())!=\n)
        
    {
        p=(LinkList)malloc(sizeof(LNode));
        p->data=ch;
        pNow->next=p;
        pNow=pNow ->next;
        pNow->next=NULL;
        
    }
    
    return L;
    
}

//输出函数:

void PrintList(LinkList L)
{LinkList pNow =(LinkList )(malloc (sizeof(LNode)));
pNow =L;
while(pNow->next!=NULL){
    putChar(pNow->next->data);
    pNow=pNow->next;}
puts("");
}
//insert data into list
void insert(LinkList  l,char c,int position ){
    if(position <0||position >getLength(l)) puts("illegal parameter");
    else {
        LinkList pNow =l;
        for(int i =0; i< position-1 ; i++){
            pNow=pNow->next;
        }
        LinkList temp=(LinkList ) (malloc (sizeof(LNode)));
        temp->data=c;
        temp->next=pNow->next;
        pNow->next=temp; 
    }
    
}

//delete data from list
void Remove (LinkList l,int position ){
    LinkList pNow=l;
    for(int i =0;i<position -1;i++){
        pNow=pNow->next;
    }
    pNow->next=pNow->next->next;
    
}
char input(){
    char c=getche()
        ;puts("");
    return c;
}
void main(){
    puts("input some characters  ,end with enter, for initial link list ,each  character will stored in linklist ");
    LinkList l=CreateListHead();
    puts("all of the data store in linklist,you have already create, is show in below:");
    PrintList(l);
    puts("link list  is already initialed ,choose a operation by input a number  ");
    puts("1 for insert \n2 for delete\n3 for show data\n4 for exit!");
    char  c ;
    bool flag=true;
    while(  flag ){
        c=input();
        switch(c)
        {int position ;
        char a;
        case 1:puts("input  character and  position  seperated by ,");scanf("%c,%d",&c,&position);insert(l,c,position);break;    
        case 2:puts("input positon of data ,you want to delete ");scanf( "%d",&position );Remove(l,position);break;
        case 3:PrintList(l);break;
        case 4:flag=false ;break;     
        }
            puts("1 for insert \n2 for delete\n3 for show data\n4 for exit!");
    }
}

 

单链表那点事

原文:https://www.cnblogs.com/dreamofchenxinbao/p/10806060.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!