线性表编写一个程序,实现链式表的各种基本操作(假设链表的元素类型为学生记录,包括学号、姓名和成绩),并在此基础上设计一个主程序

本文详细描述了一个程序,通过C语言实现链表的基本操作,包括初始化链表、创建元素、打印链表、查找元素、插入和删除元素。主要展示了如何使用前插法和后插法创建链表,并通过示例展示了链表操作的实际应用。
摘要由CSDN通过智能技术生成

编写一个程序,实现链式表的各种基本操作(假设链表的元素类型为学生记录,包括学号、姓名和成绩),并在此基础上设计一个主程序完成如下功能:

(1)初始化链表 LinkList

(2)创建链表的元素(5条记录)

3 编写PrintList函数,输出链表LinkList所有元素;

4 编写LocateElement函数,查找链表元素的位置;

5 编写InsertElement函数,向链表中插入新元素,并调用该函数,在第 3 个元素位置上插入一条学生记录;

6 编写DeleteElement函数,删除链表元素,并调用该函数删除链表SeqList的第 1 个元素,输出删除后的线性表;

1、初始化链表 LinkList

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef struct{

               int id;

               char name[50]; 

}ElementType;

typedef struct Node{

               ElementType data;

               struct Node *next;

}Node,*LinkList;

/*初始化链表*/

void InitLinkList(LinkList &linkList)

{

               linkList= (Node *)malloc(sizeof(Node));

               linkList->next= NULL;

}

2、/*在指定的位置pos插入元素element*/

void InsertLinkList(LinkList &linkList,int pos,ElementType element)

{

               LinkList curr = linkList;

               int j;

               for(j = 0; j < pos - 1;j++)

               {

                    curr = curr->next;

              

               }

               Node *node = (Node *)malloc(sizeof(Node));

               node -> data = element;

               node -> next = NULL;

               node->next = curr->next;

               curr->next = node;

              

}

3、编写DeleteElement函数,删除链表元素,并调用该函数删除链表SeqList的第 1 个元素,输出删除后的线性表;

/*在指定的位置pos删除元素*/

void DeleteLinkList(LinkList &linkList,int pos)

{

               LinkList curr = linkList;

               LinkList q;

               int j;

               for(j = 0; j < pos - 1;j++)

               {

                    curr = curr->next;

                    q = curr->next;

                    curr->next = q->next;

                    free(q);

               }

}

/*查找元素*/

void LocateList(LinkList &linkList,ElementType element)

{

               printf("要查找的元素为:%d\t%s\n",element.id,element.name);

               LinkList curr = linkList->next;

               for(int i=1; curr;i++)

               {

                    if(!strcmp(curr->data.name,element.name))

                    {

                           printf("查找成功!");

                           return;

                    }

                    curr = curr->next;

               }

               printf("查找失败!\n");

              

}

ElementType GetLinkList(LinkList &linkList,int pos)

{

               Node *node = linkList->next;

               for(int i = 1;node && i < pos;i++)

               {

                    node = node ->next;

               }

               return node->data;

}

void PrintLinkList(LinkList &linkList)

{

               Node * node = linkList->next;

               if(!node)

               {

                    printf("链表为空!");

                    return;

               }

               for(int i = 0;node;i++)

               {

                    printf("%d\t%s\n",node->data.id,node->data.name);

                    node = node->next;

               }

}

4、前插法创建单链表

void CreateList_H(LinkList &linkList,int n)

{

              

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

               {

                    Node *node = (Node *)malloc(sizeof(Node));

                    scanf("%d" ,&node ->data.id);

                    scanf("%s",node->data.name);

                    node ->next = linkList->next;

                    linkList->next = node;

               }

}

5、后插法创建单链表

void CreateList_R(LinkList &linkList,int n)

{

               LinkList link1 = linkList;

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

               {

                    Node *node = (Node *)malloc(sizeof(Node));

                    scanf("%d" ,&node ->data.id);

                    scanf("%s",node->data.name);

                    node->next = node;

                    link1->next = node;

                    link1 = node;

               }

              

}

ElementType dataArray[]={

               {1,"wangming"},

               {2,"lisan"},

               {3,"taishanglaojun"},

               {4,"meiguozhanshi"}

};

void testLinkList()

{

               LinkList linkList;

               InitLinkList(linkList);

               /*//前插法创建单链表的测试语句

               CreateList_H(linkList,2);  //前插法创建单链表的测试语句

               PrintLinkList(linkList);   //前插法创建单链表的测试语句*/

               /*//后插法创建单链表的测试语句

               CreateList_R(linkList,2);  //前插法创建单链表的测试语句

               PrintLinkList(linkList);   //前插法创建单链表的测试语句*/

               //普通单链表的测试语句

               //首先插入四个元素

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

               {

                    InsertLinkList(linkList,i+1,dataArray[i]);

               }

               printf("插入四个元素后\n");

               PrintLinkList(linkList);

               //再次插入一个元素

               ElementType element;

               element.id = 123;

               strcpy(element.name,"测试1");

               InsertLinkList(linkList,2,element);

               printf("再次插入后\n");

               PrintLinkList(linkList);

               //删除第3个元素

               DeleteLinkList(linkList,3);

               printf("删除第3个元素后\n");

               PrintLinkList(linkList);

               //查找某元素

               LocateList(linkList,dataArray[1]);

}

void main()

{

               testLinkList();

}

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_69595107

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值