数据结构1

Posted lusilin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构1相关的知识,希望对你有一定的参考价值。

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
",num);
}

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

void number(LinkList &L){ //根据数据找到逻辑序号
Linknode *p=L->link; //p指向第一个节点
int a,j=1;
printf("请输入要查找的元素:");
scanf("%d",&a);
printf(" ");
while(p!=NULL&&p->data!=a){
p=p->link;
j++;
}
if(p==NULL){
printf("要查找的元素不在这个链表中! ");
} printf("要查找的元素%d的逻辑序号为:%d ",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("
");
    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("存储分配失败!
");
        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	",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("删除元素的逻辑序号不符合条件!
"); 
        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("存储分配错误! ");
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(" ");
insert(L);
printf("输出所以元素:");
printfdata(L->link);
printf(" ");
remove(L);
printf("输出所以元素:");
printfdata(L->link);
return 0;
}

技术图片

以上是关于数据结构1的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段5——HTML元素结构

VSCode自定义代码片段5——HTML元素结构

VSCode自定义代码片段5——HTML元素结构

discuz X3.1 源代码阅读,记录代码片段

片段中的Firebase数据不是持久的,会重新下载

代码片段 navbar