第一次作业-数据结构

链表的定义:
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

链表:

include

include

include

include

include

define TRUE 1

define FALSE 0

define OK 1

define ERROR 0

define OVERFLOW -2


typedef int Status; 
typedef int Boolean; 
typedef int ElemType;
struct LNode
 {
   ElemType data;
   struct LNode *next;
 };

typedef struct LNode *LinkList;

void InitList(LinkList *L)//构建空链表
{ 
   (*L)=(LinkList)malloc(sizeof(struct LNode));
   if(!L)
    exit(OVERFLOW);
   (*L)->next=NULL;
}

void DestroyList(LinkList *L)//摧毁链表
{
   LinkList q;
   while(L)
   {
     q=(*L)->next;
     free(L);
     *L=q;
   }
}


Status GetElem(LinkList L,int i,ElemType *e) //搜索
{
   int j=1;
   LinkList p=L->next; 
   while(p&&j<i) 
   {
     p=p->next;
     j++;
   }
   if(!p||j>i)
     return ERROR;
   *e=p->data;
   return OK;
}
Status ListInsert(LinkList *L,int i,ElemType e) //插入
{
    LinkList p=*L;int j=0;
    while(p&&j<i-1)
    {
        p=p->next,j++;
    }
    if(!p||j>i-1)
        return ERROR;
    LinkList s;
    s=(LinkList)malloc(sizeof(LNode));
    s->data=e;s->next=p->next;
    p->next=s;
    return OK;
}
Status ListDelete(LinkList *L,int i,ElemType *e)//删除
 {
    LinkList p=*L;int j=0;
    while(p->next&&j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!(p->next)||j>i-1)
        return ERROR;
    LinkList q;
    q=p->next;p->next=q->next;
    *e=q->data;free(q);
    return OK;
}

void ListTraverse(LinkList L)
{
   LinkList p=L->next;
   while(p)
   {
     printf("%3d",p->data);
     p=p->next;
   }
   printf("\n");
}

void main()
 {
    LinkList L; 
    ElemType e;
    Status i;
    int j;
    InitList(&L);
    for(j=1;j<=5;j++)
        i=ListInsert(&L,1,j);
    printf("在L的表头依次插入1~5后:L=");
    ListTraverse(L);
    GetElem(L,4,&e);
    printf("第4个元素的值为:%d\n",e);

    i=ListDelete(&L,4,&e);
    if(i==ERROR)
        printf("删除元素失败\n");
    else
        printf("删除元素成功,其值为:%d\n",e);

    printf("依次输出L的元素:");
    ListTraverse(L);

    DestroyList(&L);
}

链表如何分配内存:
调用malloc动态分配内存。

树(二叉树)的定义:
树(Tree)是 n(n≥0)个相同类型的数据元素的有限集合。

树的种类:
满二叉树、完全二叉树,非完全二叉树。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值