• 链式线性表——课上练


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 //第一关代码
      4 typedef int DataType;
      5 typedef struct node * PNode;
      6 struct node
      7 {//此处填写代码,定义链表结点类型,包含一个存放整型数据的 data 成员,和一个指向下一个结点的next成员
      8     DataType data;
      9     PNode next;
     10     
     11 };
     12  typedef struct node * LinkList;
     13 struct node *mycreateList()
     14 {//此处填写代码,创建一个只有一个头结点的空链表,头节点的数据域赋值为0,并将表头结点的地址返回
     15   LinkList list = (LinkList)malloc(sizeof(struct node));
     16 if(list!=NULL){
     17     list->data=0;
     18     list->next=NULL;
     19     return list;
     20 }
     21 }
     22 
     23 
     24 //第二关代码
     25 
     26 void myinsertHead(struct node * head, int insData )
     27 {
     28     /*在此处完成任务,实现在head为表头d 链表的头插数据元素insData的功能*/
     29     //begin
     30    PNode q= (PNode)malloc(sizeof(struct node));
     31    if(q!=NULL){
     32        q->data=insData;
     33        //q->next=NULL;
     34        q->next= head->next;
     35        head->next=q;
     36 
     37    }        
     38     
     39     //end 
     40 }
     41 
     42 void myinsertTail(struct node *  head , int insData )
     43 {
     44     /*在此处完成任务,在head为表头的单链表表尾插入数据元素insData*/
     45     //begin
     46    LinkList p = (LinkList)malloc(sizeof(struct node));
     47    p=head;
     48    while(p->next!=NULL){
     49     p=p->next;
     50    }
     51    PNode q = (PNode)malloc(sizeof(struct node));
     52    if(q!=NULL){
     53        q->data=insData;
     54        q->next=NULL;
     55        p->next=q;
     56    }
     57     
     58     //end     
     59 }
     60 
     61 void myprintList(struct node *L)
     62 {
     63      /*在此处完成任务,输出head为表头链表中的数据,每输出一个数据换一行*/
     64     //begin
     65     LinkList p = (LinkList)malloc(sizeof(struct node));
     66     p=L->next;
     67     while(p!=NULL){
     68         printf("%d
    ",p->data);
     69         p=p->next;
     70     }
     71     
     72     //end 
     73     
     74 }
     75 
     76 //第三关代码
     77  void reverseList_link( struct node *L)
     78  {
     79     //请在此处填入代码,实现链表逆置功能 
     80      //begin
     81      PNode pre=(PNode)malloc(sizeof(struct node));
     82      int i=0,num[1000];
     83      pre=L;
     84      while(pre!=NULL){
     85          num[i++]=pre->data;
     86          pre=pre->next;
     87      }
     88      pre=L;
     89      //i=0;
     90      while(pre!=NULL){
     91          pre->data=num[i--];
     92          //i++;
     93          pre=pre->next;
     94      }
     95      /*
     96      pre=L;
     97      cur=L->next;
     98      pre->next=NULL;
     99      while(cur!=NULL){
    100          tmp=cur->next;
    101          cur->next=pre;
    102          pre=cur;
    103          cur=tmp;
    104      }
    105      L=pre;
    106      */
    107    /*PNode n = (PNode)malloc(sizeof(struct node));
    108         if(n!=NULL){
    109         n->next=NULL;
    110          n->data=L->data;
    111      }
    112      
    113      
    114      p=q=L->next;
    115      
    116      while(p->next!=NULL){
    117          p=p->next;
    118          q->next=n;
    119          n=q;
    120          q=p;
    121      }
    122      L=p;
    123      */
    124     //end 
    125  }
    126 
    127 
    128 //第四关代码
    129 int locateAndChange( struct node *L, int data)
    130  {
    131     //请在此处填入代码,在头结点为L的链表中查找 与data值相等的第一个结点,若能找到该结点,则将该结点的值与前驱结点的值交换
    132     //若未找到与data值相等的结点,则返回值为-1,若找到的结点无前驱结点,则返回值为0,否则返回值为前驱结点的值
    133      //begin
    134      PNode p,q;
    135      q=p=L;
    136      while(p!=NULL){
    137          if(q!=p&&p->data==data){
    138             /* int tmp=q->data;
    139              q->data=p->data;
    140              p->data=tmp;
    141              */
    142              return q->data;
    143          }
    144          if(q==p&&p->data==data){      
    145              return 0;
    146          }
    147          q=p;
    148          p=p->next;
    149      }
    150       return -1;
    151     //end 
    152  }
    153 
    154 //第五关代码
    155 int destroyList(struct node *L)
    156 {
    157   //请在此处填写代码,实现将链表L的结点空间回收
    158  //返回值为回收结点的个数,含头结点在内   
    159 PNode p , q ;
    160 p=q= L;
    161 int cnt=0;
    162 while(p!=NULL){
    163 p=p->next;
    164 free(q);
    165 cnt++;
    166 
    167 q=p;
    168 }
    169 return cnt;
    170 }
    View Code
  • 相关阅读:
    MongoDB初期学习
    springboot+camunda实现工作流1
    一文带你深入理解位运算
    【林超所长】学科01:熵与热力学重要模型
    PM常用的讨论社区及牛人帖子
    C# 2.0 的特性 总结
    小脚本解决生活问题
    Domain Adaption 之 TCA等算法
    强化学习ddpg算法
    bindkey用法
  • 原文地址:https://www.cnblogs.com/jeseesmith/p/13825907.html
Copyright © 2020-2023  润新知