zoukankan      html  css  js  c++  java
  • 单链表代码(指针实现)

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -2
    
    typedef int ElemType;
    typedef int Status;
    typedef struct Node{
      ElemType data;
      struct Node * next;
    } Node;
    
    typedef struct Node* Link;    //定义链表指针结构类型
    
    //Link L  表示声明一个单链表结构体的指针
    //Link *L 表示声明一个存放单链表结构体指针的指针
    //头结点Link的存在是因为方便同一管理和操作数据。

    /***********************
        头插法创表
    输入:链表指针,初始化个数
    输出:状态码
    功能:头插法创建链表
    ************************/
    Status createHead(Link *L,int num){ srand(time(0)); Link link = *L; Link new; link->data = 0; link->next = NULL; int i; for(i=0;i<num;i++){ new = (Link)malloc(sizeof(Node)); new->data = rand()%100+1; new->next = link->next; link->next = new; } return OK; }

    /***********************
         尾插法创表
    输入:链表指针,初始化个数
    输出:状态码
    功能:尾插法创建链表
    ************************/
    Status createTail(Link * L,int num){ Link tmp,new,link; srand(time(0)); link = *L; link->data=0; link->next=NULL; tmp = link; int i; for(i=0;i<num;i++){ new = (Link)malloc(sizeof(Node)); new->data = rand()%100+1; new->next = tmp->next; tmp->next = new; tmp=tmp->next; } return OK; }
    /***********************
         插入节点
    输入:链表指针,插入位置,插入值
    输出:状态码
    功能:在指定的位置上插入指定的值
    ************************/
    Status insertLink(Link * L,int index,ElemType e){ index--; Link new,tmp = *L; int i=0; while( tmp && i<index ){ tmp=tmp->next; i++; } if( !tmp || i>index ){ printf("overflow "); return OVERFLOW; } new=(Link)malloc(sizeof(Node)); new->data = e; new->next = tmp->next; tmp->next = new; return OK; }
    /***********************
         删除节点
    输入:链表指针,删除位置
    输出:状态码
    功能:在指定的位置上删除指定的值
    ************************/

    Status deleteLink(Link *L,int index,ElemType *e){ index--; Link net,tmp = *L; int i=0; while( tmp && i<index){ tmp=tmp->next; i++; } if( !tmp || i>index){ printf("overflow "); return OVERFLOW; } net = tmp->next; tmp->next = net->next; free(net); return OK; }
    /***********************
         读取数据
    输入:链表指针,读取位置,存储指针
    输出:状态码
    功能:获取指定位置的值赋予给存储指针
    ************************/
    Status getValue(Link L,int index,ElemType* e){ int i=0; index--; L=L->next; //ignore head node while(L && i<index){ L=L->next; i++; } if(!L || i>index){ printf("index is valid "); return ERROR; } *e = L->data; return OK; }
    /***********************
         释放链表
    输入:链表指针
    输出:状态码
    功能:将链表的空间全部释放
    ************************/
    Status freeLink(Link*L){ Link p,q; p = (*L)->next; while(p){ q=p->next; free(p); p=q; } (*L)->next = NULL; return OK; } /***********************
         打印链表
    输入:链表指针
    输出:状态码
    功能:将链表的值一一打印出来
    ************************/
    Status printLink(Link L){ Link p = L; if(p->next==NULL){ printf("link is empty "); return OK; } int i = 1; while(p->next){ p=p->next; //忽略头节点 printf("[%d] ",p->data); if(i%10==0)printf(" "); i++; } printf(" "); return OK; }

    /***********************
         计算个数
    输入:链表指针,目标值
    输出:(int)个数结果
    功能:计算链表中指定的目标值的个数
    ************************/
    int getCount(Link L,ElemType x){ int count = 0; while( L->next ){ L=L->next; if(L->data == x)count++; } return count; } int main(){ int index,value,num = 50; Link L = (Link)malloc(sizeof(Node)); createTail(&L,num); printLink(L); //insert printf("enter index:"); scanf("%d",&index); printf("enter value:"); scanf("%d",&value); insertLink(&L,index,value); printLink(L); //delete printf("enter index:"); scanf("%d",&index); deleteLink(&L,index,&value); printLink(L); //getvalue printf("enter index:"); scanf("%d",&index); getValue(L,index,&value); printf("value is %d ",value); //getCount printf("enter value:"); scanf("%d",&value); int c = getCount(L,value); printf("count is %d ",c); //freeLink freeLink(&L); return OK; }
  • 相关阅读:
    c语言I博客作业02
    第六次作业
    第五次作业
    第四次作业
    第三次作业
    第二周作业
    第一周作业
    《面向学科竞赛的实验室信息管理体系构建》文献阅读随笔
    《高校学科竞赛管理系统研发与应用》文献阅读随笔
    《网络竞赛系统框架设计与功能模块实现》文献阅读随笔
  • 原文地址:https://www.cnblogs.com/demonxian3/p/7119027.html
Copyright © 2011-2022 走看看