用C++完成实验 单链表的建立及基本 *** 作

用C++完成实验 单链表的建立及基本 *** 作,第1张

#include<stdlib.h>

#include<stdio.h>

/* 定义ElemType为int类型 */

typedef int ElemType

#define TRUE 1

#define FALSE 0

#define flag -1

/* 单链表的结点类型 */

typedef struct LNode

{

ElemType data

struct LNode *next

} LNode,*LinkedList

/* 初始化单链表 */

LinkedList LinkedListInit()

{

LinkedList L

L=(LinkedList)malloc(sizeof(LNode))

L->next=NULL

return L

}

/* 清空单链表 */

void LinkedListClear(LinkedList L)

{

L->next=NULL

}

/* 检查单链表是否为空 */

int LinkedListEmpty(LinkedList L)

{

if (L->next==NULL) return TRUE

else return FALSE

}

/* 遍历单链表 */

void LinkedListTraverse(LinkedList L)

{

LinkedList p

p=L->next

while (p!=NULL)

{

printf("%d ",p->data)

p=p->next

}

}

//求链表长度

int LinkedListLength (LinkedList L)

{

LinkedList p

int j

p=L->next

j=0

while (p!=NULL)

{

j++

p=p->next

}

return j

}

//

LinkedList LinkedListGet (LinkedList L, int i)

{

LinkedList p

int j

p=L->next

j=1

while (p!=NULL &&j<i )

{

p=p->next

j++

}

if (j==i) return p

else return NULL

}

LinkedList LinkedListLocate ( LinkedList L, ElemType x)

{

LinkedList p

p=L->next

while ( p!=NULL &&p->data != x)

p=p->next

return p

}

void LinkedListInsert(LinkedList L, int i, ElemType x)

{

LinkedList pre,p,s

int j

pre=L

j=1

p=L->next

while (pre&&j<i)

{

pre=p

p=p->next

j++

}

if (pre==NULL)

{

printf("给的i值超过了表长")

exit(0)

}

s=(LNode *)malloc(sizeof(LNode))

s->data=x

pre->next=s

s->next=p

}

void LinkedListDel (LinkedList L,ElemType x)

{

LinkedList pre,p

int j

pre=L

j=1

p=L->next

while (p&&p->data!=x)

{

pre=p

p=p->next

j++

}

if (p==NULL)

{

printf("表中没有值为x的结点")

exit(0)

}

pre->next=p->next

free(p)

}

LinkedList LinkedListCreat( )

{

LinkedList L=LinkedListInit(),p,r

ElemType x

r=L

printf("please input data,input -1 is end\n")

scanf("%d",&x)

while (x!=flag)

{

p=(LinkedList)malloc(sizeof(LNode))

p->data=x

r->next=p

r=p

scanf("%d",&x)

}

r->next=NULL

return L

}

int main()

{

int quit=0

int i

ElemType e

LinkedList L

while (!quit)

{

int d

printf("please input the operation\n")

printf("1.初始化链表 2.清空链表3.求链表长度4.检查链表是否为空\n")

printf("5.遍历链表 6.从链表中查找元素\n")

printf("7.从链表中查找与给定元素值相同的元素在顺序表中的位置\n")

printf("8.向链表中插入元素9. 从链表中删除元素10.创建一个单链表\n")

printf("其他键退出。。。。。\n")

scanf("%d",&d)

switch (d)

{

case 1:

L=LinkedListInit()

break

case 2:

LinkedListClear(L)

break

case 3:

printf("链表长度为:%d\n",LinkedListLength(L))

break

case 4:

if (LinkedListEmpty(L))printf("true\n")

else printf("false\n")

break

case 5:

LinkedListTraverse(L)

break

case 6:

printf("请输入查找的位置.\n")

scanf("%d",&i)

printf("位置是: %d\n",LinkedListGet(L,i))

break

case 7:

printf("请输入数值.\n")

scanf("%d",&e)

printf("位置是: %d\n",LinkedListLocate(L,e))

break

case 8:

printf("请输入插入的位置和值.\n")

scanf("%d%d",&i,&e)

LinkedListInsert(L,i,e)

break

case 9:

printf("请输入删除的数值:\n")

scanf("%d",&e)

LinkedListDel(L,e)

break

case 10:

L=LinkedListCreat()

break

default:

quit=1

}

}

return 0

}

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct people

{

    char name[10]

    int age

    struct people * next

}

int main()

{

    struct people * head=NULL

    struct people * prev , * current

    int flag=1

    while(flag!=0)

    {

        printf("请输入学生姓名,年龄:(年龄输入0结束所有输入工作)\n")

        current=(struct people *)malloc(sizeof(struct people))

        if(head==NULL)

            head=current

        else

            prev->next=current

        current->next=NULL

        scanf("%s",&current->name)

        scanf("%d",&current->age)

        prev=current

        flag=current->age

    }

    printf("Output:\n")

    if(head==NULL)

        printf("无资料。\n")

    else

    {

        current=head

        while(current->next!=NULL)

        {

            printf("姓名:%s\n年龄:%d\n\n",current->name,current->age)

            current=current->next

        }

    }

}

至于排序,断开旧链表,将前后指针链接到新的节点就好

如果还有问题欢迎再问哈


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8123789.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存