zoukankan      html  css  js  c++  java
  • C语言实现双链表练习

      1 #include <stdio.h>
    2 #include <stdlib.h>
    3
    4 typedef int ElemType;
    5
    6 //定义双链表结点类型
    7
    8 typedef struct Node{
    9 ElemType data;
    10 struct Node *prior; //指向前驱结点
    11 struct Node *next; //指向后继结点
    12 }Node, *DLinkList;
    13
    14 //双链表的建立,采用尾插法建立双链表
    15
    16 DLinkList DLinkListCreate(){
    17 Node *L,*p,*r;
    18 L=(Node *)malloc(sizeof(Node));//申请头结点
    19 L->next=NULL;
    20 r=L;
    21 r->next=NULL; //r 为指向终端结点的指针
    22 ElemType x;
    23 printf("输入结点啊\n");
    24 while(scanf("%d",&x)!=EOF){ //输入双链表元素,建立双链表
    25 p=(Node *)malloc(sizeof(Node));
    26 p->data=x;
    27 p->next=r->next;
    28 r->next=p;
    29 r=p;
    30 }
    31 r->next=NULL;
    32 return L;
    33 }
    34
    35 //双链表查找,查找元素为x的位置
    36
    37 int DLinkListFind(DLinkList L,ElemType x){
    38 DLinkList p; //p为检索
    39 p=L->next;
    40 int i=1;
    41 while(p!=NULL && p->data != x){
    42 ++i;
    43 p=p->next;
    44 }
    45 // for(i=1,p=L->next;p;p=p-next,++i){
    46 // if(p->data==x){
    47 // break;
    48 // }
    49 // }
    50 if(p==NULL){ //如果没找到返回0
    51 return 0;
    52 }else{
    53 return i; //如果找到返回i
    54 }
    55 }
    56
    57 //双链表插入,在双链表的第i个位置插入值为x的元素(在原来第i个位置前)
    58
    59 DLinkList DLinkListInsert(DLinkList L,int i,ElemType x){
    60 DLinkList p,s; //s为要插入的结点
    61 p=L->next; //从第一个结点位置开始查找
    62 int tempi;
    63 for(tempi=1;tempi<i-1;++tempi){
    64 p=p->next;
    65 }
    66 s=(Node *)malloc(sizeof(Node));
    67 s->data=x;
    68 s->next=p->next;
    69 p->next->prior=s;
    70 s->prior=p;
    71 p->next=s;
    72
    73 return L;
    74 }
    75
    76 //双链表的删除,删除双链表中第i个结点
    77
    78 DLinkList DLinkListDelete(DLinkList L,int i){
    79 int tempi=1;
    80 DLinkList p; //p为查找结点
    81 p=L->next;
    82 while((tempi++)!=i && p!=NULL){
    83 p=p->next;
    84 }
    85 if(p==NULL){ //检查是否在双链表中的位置
    86 printf("位置不合法\n");
    87 }else if(p->next == NULL){
    88 p->prior->next=NULL;
    89 free(p);
    90 }else{
    91 p->prior->next=p->next;
    92 p->next->prior=p->prior;
    93 free(p);
    94 }
    95 }
    96 int main(){
    97 DLinkList list,start;
    98 list=DLinkListCreate();
    99 for(start=list->next;start!=NULL;start=start->next){
    100 printf("%d ",start->data);
    101 }
    102 printf("\n");
    103 int i;
    104 ElemType x;
    105 printf("请输入要查找元素的值:");
    106 scanf("%d",&x);
    107 i = DLinkListFind(list,x);
    108 if(i){
    109 printf("在链表中的位置为:%d\n",i);
    110 }else{
    111 printf("没有这个元素。\n");
    112 }
    113 printf("请输入插入位置:");
    114 scanf("%d",&i);
    115 printf("请输入插入元素的值:");
    116 scanf("%d",&x);
    117 DLinkListInsert(list,i,x);
    118 for(start=list->next;start!=NULL;start=start->next){
    119 printf("%d ",start->data);
    120 }
    121 printf("\n");
    122 printf("请输入要删除的位置:");
    123 scanf("%d",&i);
    124 DLinkListDelete(list,i);
    125 for(start=list->next;start!=NULL;start=start->next){
    126 printf("%d ",start->data);
    127 }
    128 printf("\n");
    129 return 0;
    130 }
  • 相关阅读:
    基于聚宽量化交易平台实现量化交易策略
    量化交易——双均线策略(金叉死叉)
    商城支付功能
    商城——结算中心模块
    Tushare(金融数据接口包)
    CSS页面布局单位总结
    Python
    Python
    无需编程的爬虫
    Python
  • 原文地址:https://www.cnblogs.com/Akagi201/p/2411054.html
Copyright © 2011-2022 走看看