欢迎光临散文网 会员登陆 & 注册

数据结构

2023-03-16 15:41 作者:学习使我快乐无边  | 我要投稿

#include <stdio.h>

#include <malloc.h>

typedef char ElemType;

typedef struct LNode    //定义单链表结点类型

{

    ElemType data;

    struct LNode *next;

} LinkList;

void InitList(LinkList *&L);        //初始化线性表

void DestroyList(LinkList *&L);    //销毁线性表

bool ListEmpty(LinkList *L);//判线性表是否为空表

int ListLength(LinkList *L);    //求线性表的长度

void DispList(LinkList *L);//输出线性表

bool GetElem(LinkList *L,int i,ElemType &e)    ;//求线性表中某个数据元素值

int LocateElem(LinkList *L,ElemType e);//按元素值查找

bool ListInsert(LinkList *&L,int i,ElemType e);    //插入数据元素

bool ListDelete(LinkList *&L,int i,ElemType &e)    ;//删除数据元素

int main()

{

    LinkList *h;

    ElemType e;

    printf("单链表的基本运算如下:\n");

    printf("  (1)初始化单链表h\n");

    InitList(h);

    printf("  (2)依次采用尾插法插入a,b,c,d,e元素\n");

    ListInsert(h,1,'a');

    ListInsert(h,2,'b');

    ListInsert(h,3,'c');

    ListInsert(h,4,'d');

    ListInsert(h,5,'e');

    printf("  (3)输出单链表h:");

    DispList(h);

    printf("  (4)单链表h长度=%d\n",ListLength(h));

    printf("  (5)单链表h为%s\n",(ListEmpty(h)?"空":"非空"));

    GetElem(h,3,e);

    printf("  (6)单链表h的第3个元素=%c\n",e);

    printf("  (7)元素a的位置=%d\n",LocateElem(h,'a')+1);

    printf("  (8)在第4个元素位置上插入f元素\n");

    ListInsert(h,4,'f');

    printf("  (9)输出单链表h:");

    DispList(h);

    printf("  (10)删除h的第3个元素\n");

        ListDelete(h,3,e);

    printf("  (11)输出单链表h:");

    DispList(h);

    printf("  (12)释放单链表h\n");

    DestroyList(h);

}

int ListLength(LinkList* L)

{

LinkList* Ltemp = L->next;

int a = 0;

while (Ltemp != NULL)

{

a++;

Ltemp = Ltemp->next;

}

return a;

}

void InitList(LinkList*& L)

{

L = (LinkList*)malloc(sizeof(LinkList));

L->next = NULL;

}

bool ListInsert(LinkList*& L, int i, char e)

{

int j = 0;

LinkList* Ltemp = L, * Lnew;

if (i <= 0)return false;

while (j < i - 1 && Ltemp != NULL)

{

j++;

Ltemp = Ltemp->next;

}

if (Ltemp == NULL)return false;

else

{

Lnew = (LinkList*)malloc(sizeof(LinkList));

Lnew->data = e;

Lnew->next = Ltemp->next;

Ltemp->next = Lnew;

return true;

}


}

void DispList(LinkList* L)

{

LinkList* Ltemp = L->next;

while (Ltemp != NULL)

{

printf("%c ", Ltemp->data);

Ltemp = Ltemp->next;

}

printf("\n");

}

bool ListEmpty(LinkList* L)

{

if (L->next == NULL)return true;

else return false;

}

bool GetElem(LinkList* L, int i, char& e)

{

LinkList* Ltemp = L;

for (int a = 0; a < i; a++)

{

Ltemp = Ltemp->next;

}

e = Ltemp->data;

return true;

}

int LocateElem(LinkList* L, char e)

{

LinkList* Ltemp = L;

int a = ListLength(L);

for (int i = 0; i < a; i++)

{

if (Ltemp->data == e)return i;

}

return 0;

}

bool ListDelete(LinkList*& L, int i, char& e)

{

LinkList* Ltemp = L, * Lde = L;

int a = 0;

for (; a < i; a++)Ltemp = Ltemp->next;

while (Lde->next != Ltemp)Lde = Lde->next;

Lde->next = Ltemp->next;

free(Ltemp);

return true;

}

void DestroyList(LinkList*& L)

{

LinkList* Ltemp = L;

while (Ltemp != NULL)

{

LinkList* d = Ltemp;

Ltemp = Ltemp->next;

free(d);

}

}


数据结构的评论 (共 条)

分享到微博请遵守国家法律