首页 > 编程语言 > 详细

c语言数据结构轮子

时间:2021-07-19 00:29:01      阅读:24      评论:0      收藏:0      [点我收藏+]

1、head.h

技术分享图片
//文件名:head.h
//预定义常量及常用头文件
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<malloc.h>
#include<math.h>
#include<process.h>
#define TURE 1;
#define FALSE 0;
#define OK 1;
#define ERROR 0;
#define INFEASIBLE -1;//不可行
typedef int Status;//Status是函数的类型,其值是函数结果的状态代码,如OK等
typedef int Boolean;//布尔类型,值为TURE 或 FALSE
typedef int ElemType;//数据元素定义,用户在使用该数据类型也可自行定义
head.h

2、单链表

技术分享图片
//文件名:linklist.h
#include"head.h"
typedef struct LNode
{
    int data;
    struct LNode*next;
}LNode,*LinkList;  //LinkList L:L是一个指向LNode类型变量的指针

//1、初始化
//函数:InitList(LinkList &L)
//功能:构造一个空单链表,指分配一个节点的存储空间,并令指针域节点为空 
void InitList(LinkList &L)
{
    L=(LinkList)malloc(sizeof(LNode));//???
    if(!L)exit(1); //exit():用在子程序中终结程序用的,exit(0):表示正常退出;exit(1):表示异常退出
    L->next=NULL;
}

//2、求链长
//函数:ListLenth(LinkList L)
//功能:返回带头节点单链表长度
int ListLenth(LinkList L)
{
    int len=0;
    LinkList p=L->next;
    while(p!=NULL)
    {
        ++len;
        p=p->next;
    }
    return len;
}


//3、判断空
//函数:ListEmpty(LinkList L)
//功能:判断单链表是否为空
int ListEmpty(LinkList L)
{
    if(L->next==NULL)return TURE;
    return FALSE;
}


//4、取元素
//函数:GetELem(LinkList L,int i,ElemType &e)
//功能:当第i个元素存在时,赋值给e,返回1,否则返回0;
int GetELem(LinkList L,int i,ElemType &e)//ELemType为元素类型,用户自定(默认int) 
{                                        //int &e为引用,效果相当于int *e,详见博客。
    //L:带头节点的单链表的头指针
    int j;
    LinkList p;
    p=L->next;j=1;//初始化p指向第一个节点,j:节点计数器
    while(p||j<i)//顺着指针向后查找,直到p指向第i个元素或p为空
    {
        p=p->next;
        j++;
    }
    if(!p||j>i)return ERROR;
    e=p->data;
    return OK;
}


//5、插入节点
//函数:ListInsert(LinkList &L,int i,ElemType e)
//功能:在带头节点的单链表L第i-1与i个位置之间插入元素e
int ListInsert(LinkList &L,int i,ElemType e)
{
    LinkList p=L,s;
    int j=0;
    while (p||j<i-1)
    { p=p->next; j++;}//寻找第i-1个节点
    if(!p||j>i-1)return ERROR;
    s=(LinkList)malloc(sizeof(LNode));//创建新节点
    s->data=e;
    s->next=p->next;        //插入
    p->next=s;
    return OK;
}

//6、删除节点
//函数:ListDelete(LinkList &L,int i,ElemType &e)
//功能:删除带头节点的单链表L的第i个节点,并用e返回被删除节点的值
int ListDelete(LinkList &L,int i,ElemType &e)
{
    LinkList p=L,q;
    int j=0;
    while (p||j<i-1)
    { p=p->next; j++;}//寻找第i-1个节点
    if(!p||j>i-1)return ERROR;
    q=p->next;
    p->next=q->next;
    e=q->data;
    free(q);
    return OK;

}


//7、按值查找
//书有错,自改之
//函数:LocateElem(LinkList L,ElemType e)
//功能:按值查找,从头指针开始遍历,依次将被遍历到的结点的值与给定值比较,
//如果相等返回首次出现与给定值相等的数据元素序号,成为查找成功,否则返回0表示失败。
int LocateElem(LinkList L,ElemType e)
{
    int i=1;
    LinkList p=L->next;//p的初值为第一个节点的指针
    while (p&&p->data!=e)
    {
        ++i;
        p=p->next;
    }
    if(i<=ListLenth(L))return i;
    else return 0; 
    
}



//8、新建链表
//函数:CreateList(LinkList &L,int n)
//功能:逆序输入n个元素的值,建立带表头节点的单链表La
void CreateList(LinkList &L,int n)
{
    LinkList p;int i;
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;   //这两句给初始化了个带头节点的空单链表,L定义完就行,不用InitList
    for(i=n;i>0;i--)
    {
        p=(LinkList)malloc(sizeof(LNode));//产生新节点
        scanf("%d",&p->data);             //输入元素值
        p->next=L->next;                  //插入到表头
        L->next=p;
    }
    
}
linklistop.h

 

3、

4、

c语言数据结构轮子

原文:https://www.cnblogs.com/xvfang/p/15028356.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!