码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构1

时间:2019-04-09 00:51:34      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:lin   nod   eof   表示   list   ==   val   int   赋值   

include<stdio.h>

include<stdlib.h>

typedef struct node{ //定义
int data;
struct node link;
}Linknode,
LinkList;

void  construct(LinkList &L,int ending){                  //单链表初始化,赋值 (尾插法) 
    int val;
    printf("请输入数据:"); 
    scanf("%d",&val);
    if(val==ending) { 
      L=NULL;
      printf("此链表为空!") ;
      return;
      } 
    else {
        L=(Linknode*)malloc(sizeof(Linknode));               //创建头节点 
    if(!L){
        printf("存储分配失败!");
         exit(1);                                                        //返回 
     }
     L->data=val;
     construct(L->link,ending);                               //L=L->link; 
        }
    }
        
void length(LinkList &L){                                       //计算链表长度 
    Linknode *p=L->link;                                         //p指向第一个节点 
    int num=0;                                                        //num表示链表长度 
    while(p!=NULL){                     
        p=p->link;
        num++;
    }
    printf("链表的长度为:%d\n",num);
}

void locatedata(LinkList &L){ //根据逻辑序号查找对应的数据
int a,j=1;
Linknode *p=L->link; //p指向第一个节点
printf("请输入要查找元素的逻辑序号:");
scanf("%d",&a);
printf("\n");
while(p!=NULL&&j<a){
p=p->link;
j++;
}
if(p==NULL){
printf("逻辑序号超出链表长度!\n");
}else printf("逻辑序号为%d,在链表中对应的数据为:%d\n",a,p->data);
}

void number(LinkList &L){ //根据数据找到逻辑序号
Linknode *p=L->link; //p指向第一个节点
int a,j=1;
printf("请输入要查找的元素:");
scanf("%d",&a);
printf("\n");
while(p!=NULL&&p->data!=a){
p=p->link;
j++;
}
if(p==NULL){
printf("要查找的元素不在这个链表中!\n");
} printf("要查找的元素%d的逻辑序号为:%d\n",a,j);
}

 LinkList locate(LinkList &L,int i){                                   //根据逻辑序号查找对应的位置 
    int a,j=1;
    Linknode *p=L->link;
    while(p!=NULL&&j<i){
        p=p->link;
        j++;
    }
    return p;
}

  void insert(LinkList L){                                          //插入数据 
    LinkList p;
    int a,b;
    printf("请输入要插入的元素:");
    scanf("%d",&a);
    printf("\n");
    printf("请输入要插入的逻辑序号:"); 
    scanf("%d",&b);
    p=locate(L,b-1);                                                      //调用locate()函数 ,找到要插入的前一个位置 
    if(p==NULL)  {
      printf("插入位置不当!");
      return;} 
    Linknode *s=(Linknode*)malloc(sizeof(Linknode));                         //创建新的节点 
    if(s==NULL){
        printf("存储分配失败!\n");
        exit(1);                                                                                           //返回 
    } s->data=a;                                                                                         // s的数据域为a 
    s->link=p->link;                                                                                         //先连 
    p->link=s;                                                                                                   //再断 
    return;

}

   void  printfdata(LinkList L ){                                                         //输出单链表          
    if(L==NULL)  return;
    printf("%d\t",L->data);                                                                   //表示第一个节点的数据 
    printfdata(L->link);
       }
   
   
void  remove(LinkList  &L){                                                       //删除数据 
    int a;  
    Linknode *p;
    printf("请输入要删除元素的逻辑序号:");
    scanf("%d",&a); 
    p=locate(L,a-1);                                                       //找到删除数据的前一个位置 
    if(p==NULL||p->link==NULL){
        printf("删除元素的逻辑序号不符合条件!\n"); 
        return; 
    }
    Linknode *q;
    q=p->link;
    p->link=q->link;
    free(q);                                                                                  //销毁q 
} 

int main(){
Linknode L,p;
int ending;
L=(Linknode*)malloc(sizeof(Linknode)); //创建头节点
if(!L){ //如果L为空,则执行。
printf("存储分配错误!\n");
exit(1); //表示退出函数
}
printf("请输入约定的输入序列结束标志:");
scanf("%d",&ending);
p=L; //p指向头节点
construct(p->link,ending); //调用创建、初始化函数construct();
length(L); //调用长度函数length();
locatedata(L);
number(L);
printf("输出所以元素:");
printfdata(L->link); //将L->link=L;
printf("\n");
insert(L);
printf("输出所以元素:");
printfdata(L->link);
printf("\n");
remove(L);
printf("输出所以元素:");
printfdata(L->link);
return 0;
}

技术图片

数据结构1

标签:lin   nod   eof   表示   list   ==   val   int   赋值   

原文地址:https://www.cnblogs.com/lusilin/p/10674434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!