zoukankan      html  css  js  c++  java
  • C单链表操作

    #include <stdio.h>
    #include <stdlib.h>
    
    #define ElemType    int
    #define Status      int
    #define OK          0
    #define ERROR       -1
    
    typedef struct
    {
        ElemType data;
        struct Node *next;
    }Node;
    
    typedef struct Node *LinkList;   /*定义LinkList*/
    
    
    Status GetElem(LinkList L, int i, ElemType *e)
    {
        int j=1;
        LinkList p;     /*声明一指针p*/
        p = L->next;
        while (p && j<i)
        {
            p = p->next;
            ++j;
        };
    
        if (i <= j || !p)
            return ERROR;
        
        *e = p->data;
    
        return OK;
    }
    
    
    /*初始条件: 顺序线性表已经存在, 1<=i<=ListLength(L).*/
    /*操作结果: 这里指在链表第i个元素之前插入元素e, L的长度加1*/
    /*元素前后定义:箭头指向的方向为前*/
    Status ListInsert(LinkList L,int i, ElemType e)
    {
        LinkList p,s;
        p = *L;
        int j=1;
        while(p && j<i)
        {
            p = p->next;
            ++j;
        }
        
        if(!p || j >= i)
            return ERROR;   /*第i个节点不存在*/
    
        s = (LinkList)malloc(sizeof(Node));
        s->data = e;
        s->next = p->next;
        p->next = s;
    
        return OK;
    }
    
    
    /*初始条件: 顺序线性表已经存在, 1<=i<=ListLength(L).*/
    /*操作结果: 这里指删除链表的第i个元素, 并使用e返回该元素值,L的长度减1*/
    Status ListDelete(LinkList L, int i, ElemType *e)
    {
        LinkList p, q;
        p = *L;
        int j=1
    
        while(p && j<i)
        {
            p = p->next;
            ++j;
        }
        
        if(!p || j >= i)
            return ERROR;   /*第i个节点不存在*/
    
        q = p->next;
        e = q->data;        
        p->next = q->next;
        free(q);           /*让系统回收次节点,释放内存*/     
        return OK;
    }
    
    
    
    void CreateListHead(LinkList *L, int n)
    {
        LinkList *p;
        int i;
        srand(time(0));     /*初始化随机数种子*/
        *L = (LinkList)malloc(sizeof(Node));
        L->next = NULL;     /*先建立一个带头节点的单链表*/
        for(i=0; i<n; i++)
        {
            p = (LinkList)malloc(sizeof(Node)); /*生成新节点*/
            p->data = rand()%100+1;
            p->next = (*L)->next;
            (*L)->next = p;
        }
    }
    
    void CreateListTail(LinkList *L, int n)
    {
        LinkList *p, r;
        int i;
        srand(time(0));
        *L = (LinkList)malloc(sizeof(Node));
        L->next = NULL;
        r = *L;             /*将链表尾指针赋给r*/ 
        for(i=0; i<n; i++)
        {
            p = (LinkList)malloc(sizeof(Node)); /*生成新节点*/
            p->data = rand()%100+1;
            r->next = p;
            r = p;                              /*将当前的新节点定义为表尾的终端节点*/
        }
        r->next=NULL;
    }
    
    Status ClearList(LinkList *L)
    {
        LinkList p,q;
        p = (*L)->next;
    
        while(p)
        {
            q = p->next;
            free(q);
            p = q;
        }
        (*L)->next = NULL;
        return OK;
    }
    
    int main()
    {
        LinkList *mylist;
        CreateListTail(mylist, 16);
        printf(" %d ", mylist->next->data);
    }
    

      

  • 相关阅读:
    Mac 如何开启任何来源选项
    Fiddler抓包工具总结
    Inpaint>>一款神奇的去水印工具
    Adobe After Effects 2021 中文版 视频特效制作软件
    利用百度接口实现免费文字转语音
    普通电脑如何实现网吧锁屏?让你的电脑实现网吧挂机锁功能的方法
    一款强大的思维导图软件-XMind:ZEN 2020v10.0-免费安装与使用
    教你用 Python 修改微信(支付宝)运动步数,轻松升到 TOP1
    C# Winforn窗体的Load事件和Shown事件的区别
    判断输入的字符串是否是合法路径,并验证后面的输入是否含有非法字符
  • 原文地址:https://www.cnblogs.com/noxy/p/9462463.html
Copyright © 2011-2022 走看看