精华内容
下载资源
问答
  • 创建一个单链表并输出单链表 ①基本思路: 定义一个结构体,包含数据域和指针域,前者为该结点保存的用户数据,后者为该结点保存的下一个相邻结点的地址。 定义一个结点创建函数(返回head),用head指向第一个结点、...

    创建一个单链表并输出单链表

    ①基本思路:

    • 定义一个结构体,包含数据域和指针域,前者为该结点保存的用户数据,后者为该结点保存的下一个相邻结点的地址。
    • 定义一个结点创建函数(返回head),用head指向第一个结点、p1开辟新节点、p2连接新节点。
    • 定义一个结点输出函数,用do…while形式依次打印出每一个结构体成员数据域。
    • 在main()函数中,依次调用上述函数。

    ②源代码:

    /* 创建一个单链表,每个结点包含三个元素,学生编号、分数、保存下一个节点地址的指针 */
    #include <stdio.h>
    #include <stdlib.h>
    
    #define len sizeof(struct Student)//每个结点所占用存储空间大小
    struct Student
    {
    	long num;
    	float score;
    	struct Student * next;//保存下一个相邻结点的地址
    };
    
    int n;//用于记录结点个数
    
    /*获取单链表头指针*/
    struct Student *creat()
    {
    	/*head指向头结点,并作为最后函数返回值。*/
    	/*p1负责开辟新结点(永远指向新结点)*/
    	/*p2负责链接下一个相邻结点,即p2的next成员指向后面的p1(指向最后一个结点)*/
    	struct Student *head,*p1,*p2;
    	n=0;
    	p1=p2=(struct Student *)malloc(len);//开辟第一个结点,p1和p2都指向该结点
    	printf("Enter the num and the score please:\n");
    	scanf("%ld,%f",&p1->num,&p1->score);//输入第一个学生的编号和成绩 
    	head=NULL;
    	while(p1->num!=0)//新开辟的结点中,p1->num成员数据不是0,则一直循环
    	{
    		n=n+1;
    		if(n==1)head=p1;//只有一个结点,确定头指针
    		else p2->next=p1;//有多个结点,使第一个结点的next指向第二个结点的地址
    		p2=p1;//p2指向最后一个结点,为开辟下一个结点做准备
    		p1=(struct Student *)malloc(len);//开辟下一个结点
    		scanf("%ld,%f",&p1->num,&p1->score);//输入其它学生的编号和成绩 
    	}
    	p2->next=NULL;
    	return(head);
    }
    
    /*输出单链表*/
    void print(struct Student *head)
    {
    	struct Student *p;
    	printf("\nThese %d nodes are:\n",n);
    	p=head;
    	do
    	{
    		printf("%ld,%f\n",p->num,p->score);//输出头结点数据 
    		p=p->next;//依次输出其它结点数据 
    	}while(p!=NULL);//p=NULL表明已到表尾,退出循环
     } 
    
    void main()
    {
    	struct Student * head;
    	head=creat();//返回头指针 
    	print(head);//从头指针所指向结点开始,依次打印出其它结点数据
    }
    

    ③运行结果:
    在这里插入图片描述

    展开全文
  • //创建一个空表; if (*list == NULL) { cout << "空间申请失败"; return 0; } else list_headinsert(list, p, n); for (int i = 1; i < n; i++)//按顺序导出数据元素; cout <&...
  • 单链表创建及操作

    2020-03-15 17:17:57
    1、创建一个带头结点的单链表(头指针为head),且遍历此链表(输出链表中各结点的值); 2、查找单链表中的第i个结点,并输出结点元素的值; 3、在单链表中的第i个结点前插入一个结点值为e的正整数(从外部输入); 4...

    1、创建一个带头结点的单链表(头指针为head),且遍历此链表(输出链表中各结点的值);
    2、查找单链表中的第i个结点,并输出结点元素的值;
    3、在单链表中的第i个结点前插入一个结点值为e的正整数(从外部输入);
    4、删除单链表中的第j个结点;
    5、将单链表中的各结点就地逆序(不允许另建一个链表);
    #include
    #include
    #include
    using namespace std;
    typedef struct lnode
    {
    int date;
    struct lnode
    next;
    }linklist;
    linklist* creatlist(int m)
    {
    linklistp1, p2, head;
    p1 = p2 = head = (linklist
    )malloc(sizeof(lnode));
    head->next = NULL;
    while(m!=0)
    {
    cin >> p1->date;
    p1 = (linklist
    )(malloc(sizeof(lnode)));
    p2->next= p1;
    p2 = p1;
    m–;
    }
    p1->next = NULL;
    return head;
    }
    void bianlilist(linklist
    head)
    {
    linklistp1;
    p1 = head;
    do
    {
    cout << p1->date << " ";
    p1 = p1->next;
    } while (p1->next != NULL);
    }
    void search(linklist
    head)
    {
    linklist* p;
    p = head;
    int n;
    cin >> n;
    while (n != 1)
    {
    p = p->next;
    n–;
    }
    cout << p->date;
    }
    void insert(linklisthead,int z)
    {
    int n,m;
    linklist
    p1,p2;
    cin >> n>>m;
    p1 = (linklist
    )(malloc(sizeof(lnode)));
    p1->date =m;
    p2 = head;
    if (n == 1)
    {
    p1->next = p2;
    head= p1;
    }
    else
    if (n == z)
    {
    while (m>1)
    {
    p2 = p2->next; m–;
    };
    p2->next = p1;
    p1->next = NULL;
    }
    else
    {
    while (n - 1 >1)
    {
    p2 = p2->next; n–;
    }
    p1->next = p2->next;
    p2->next = p1;
    }
    bianlilist(head);
    }
    void del(linklisthead,int z)
    {
    int m;
    linklist
    p2;
    p2 = head;
    cin >> m;
    if (m == 1)
    head = head->next;
    else
    if (m == z)
    {
    while(m>1)
    {
    p2 = p2->next; m–;
    } ;
    p2->next = NULL;
    }
    else
    {
    while(m>2)
    {
    p2 = p2->next; m–;
    }
    p2->next = p2->next->next;
    }
    bianlilist(head);
    }
    void sort1(linklist*head,int m)
    {
    linklist *New, *old, tag;
    int y = 1;
    New = head;
    old = New->next;
    while (y<m)
    {
    tag =old->next;
    old->next= New;
    New = old;
    old = tag;
    y++;
    }
    head->next= old;
    bianlilist(New);
    }
    int main()
    {
    int n, m;
    linklist
    head;
    cout << “创建单链表,请输入数据长度和数据\n”;
    cout << “遍历链表请输入 :1\n”;
    cout << “查找节点请输入 :2 \n”;
    cout << “插入节点请输入 :3\n”;
    cout << “删除单链表请输入 :4\n”;
    cout << “逆序单链表请输入 :5\n”;
    cin >> m;
    head=creatlist(m);
    cout << “请输入操作数:”;
    cin >> n;
    switch (n)
    {
    case 1:bianlilist(head); break;
    case 2:cout << “输入要查找的序号:”; search(head); break;
    case 3:cout << “输入要插的位置和插入的值:”; insert(head,m); break;
    case 4:cout << “输入要删除的序号:”; del(head,m); break;
    case 5:sort1(head,m); break;
    }
    }
    03在这里插入图片描述
    05在这里插入图片描述
    01
    ![01![](https://img-blog.csdnimg.cn/20200315171458208.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTk2NTM1OA==,size_16,color_FFFFFF,t_70)04在这里插入图片描述
    02在这里插入图片描述

    展开全文
  • 单链表(带头结点)的创建

    千次阅读 2018-03-10 16:05:32
    题目描述1.问题描述给出初始数据,实现单链表的定义、创建输出。...单链表输出:从头至尾遍历单链表输出结点的元素值。注:程序不可定义任何数组,否则不计成绩。要求:查找定义子函数:int Find(Node ...

    题目描述

    1.问题描述

    给出初始数据,实现单链表的定义、创建、输出。

    2.算法

    单链表结点的存储结构包含两部分:数据、下一结点指针。

    单链表的创建:输入n个数据e,若数据e不在单链表中,为数据e分配结点,并插入在单链表的尾部;若单链表中已有数据e,则不做任何操作。

    单链表的输出:从头至尾遍历单链表,输出每个结点的元素值。

    注:程序不可定义任何数组,否则不计成绩。

    要求:查找定义子函数:int Find(Node *H,int e) //找到e返回1,找不到返回0。其中Node为链表结点结构体名,H为链表头指针。

    输入

    第一行:测试次数t

    对每组测试数据,格式如下:

    数据个数n 数据1 数据2 数据3 ... 数据n

    输出

    对每组测试数据,输出链表中元素个数和单链表中的全部数据。

    样例输入

    2
    5 2 3 5 7 3
    6 1 2 10 0 1 5

    样例输出

    4 2 3 5 7
    5 1 2 10 0 5

    代码实现:如下

    //
    // Created by HP on 2018/3/9.
    //
    #include <iostream>
    using namespace std;
    struct node{
        int num;
        node *next;
    };
    int c;
    int find(node *head,int key)
    {
        node *finder=head->next;
        while(finder!=NULL){
            if(finder->num==key)//如果想要插入的数据已经在链表中
                return  1;
            finder=finder->next;
        }
        return 0;
    }
    void CreateList(node *head)
    {
        node *tail=head;
        int data;
        int n,i;
        cin>>n;
        for(i=0;i<n;i++){
            cin>>data;
            if(find(head,data)==0){
                node *s=new node;//创建新的节点
                s->num=data;
                s->next=NULL;
                tail->next=s;//将新结点插入链表中
                tail=s;
                c++;
            }
        }
    }
    void ShowList(node *head)
    {
        cout<<c<<" ";
        node *display=head->next;
        while(display){
            c--;
            cout<<display->num<<" ";
            display=display->next;
        }
        cout<<endl;
    }
    int main()
    {
        int t;
        cin>>t;
        while(t--){
            c=0;
            node *head=new node;
            head->next=NULL;
            CreateList(head);//创建
            ShowList(head);//输出
        }
        return 0;
    }
    

    展开全文
  • /*1、创建一个带头结点的单链表(头指针为head),且遍历此链表(输出链表中各结点的值); 2、查找单链表中的第i个结点,并输出结点元素的值; 3、在单链表中的第i个结点前插入一个结点值为e的正整数(从外部输入)...

    大一下期第二次数据结构单链表实验代码
    case 2及case 5处仍存在问题待解决

    /*1、创建一个带头结点的单链表(头指针为head),且遍历此链表(输出链表中各结点的值);
          2、查找单链表中的第i个结点,并输出结点元素的值;
          3、在单链表中的第i个结点前插入一个结点值为e的正整数(从外部输入);
          4、删除单链表中的第j个结点;
          *5、将单链表中的各结点就地逆序(不允许另建一个链表);
    */
    #define OK 1
    #define ERROR -1
    #include<stdio.h>
    #include<stdlib.h>
    #include <iostream>
    using namespace std;
    typedef struct LNode   //单链表存储结构
    {
        int data;     //结点数据域
        struct LNode *next;//结点的指针域
    }LNode,*LinkList;
    LNode head;
    int ListInit(LinkList &head)//构造一个空的单链表L
    {
        head=new LNode;//生成新结点作为头结点,头指针head指向头结点
        head->next=NULL;//头结点指针域置空
        return OK;
    }
    int ListCreat_R(LinkList &head,int n)//后插法创建单链表
    {
        LinkList r,p;
        r=head;
        cout<<"请输入链表的元素:"<<endl;
        for(int i=0;i<n;i++)
        {
            p=new LNode;//生成新结点
            cin>>p->data;//输入元素赋值给新结点*p的数据域
            p->next=NULL;
            r->next=p;//将新结点插入尾结点*r
            r=p;//r指向新的尾结点*p
        }
        return OK;
    }
    int ListTraverse(LinkList &head)//遍历链表
    {
        LinkList p=head->next;//初始化,p指向首元结点
        int i=0;//计数器赋值为0
        while(p)
        {
            cout<<p->data<<" ";
            p=p->next;
            i++;
        }
        if(i==0)
        {
            cout<<"链表为空!"<<endl;
            return ERROR;
        }
        return OK;
    }
    int GetElem(LinkList &head,int i,int &e)//按位置查找链表元素的值
    {
        LinkList p=head->next;//初始化,p指向首元结点
        int j=1;//计数器j赋初值为1
        while(p&&j<1)//顺链域向后扫描直到p为空或p指向第i个元素
        {
            p=p->next;//p指向下一个结点
            ++j;//计数器加一
        }
        if(!p||j>i)//i值不合法
            return ERROR;
        e=p->data;//取第i个结点的数据域
        return OK;
    }
    int ListInsert(LinkList &head,int i,int e)//在链表第i个位置插入值为e的新结点
    {
        LinkList p=head,s;
        int j=0;
        while(p&&(j<i-1))//查找第i-1个结点,令p指向该结点
        {
            p=p->next;
            ++j;
        }
        if(!p||j>i-1)//i值不合法返回ERROR
            return ERROR;
        s=new LNode;//生成新结点*s
        s->data=e;//*s的数据域为e
        s->next=p->next;//*s指针域指向结点a
        p->next=s;//*p指针域指向*s
        return OK;
    }
    int ListDelete(LinkList &head,int i)//在链表中删除第i个元素
    {
        LinkList p=head,q;
        int j=0;
        while((p->next)&&(j<i-1))//查找第i-1个结点,并令p指向该结点
        {
            p=p->next;
            ++j;
        }
        if(!(p->next)||(j>i-1))//i值不合法
            return ERROR;
        q=p->next;//临时保存被删结点的地址以备释放
        p->next=q->next;//改变删除结点前驱结点的指针域
        free(q);//释放删除结点的空间
        return OK;
    }
    int ListReverse(LinkList &head)//将链表原地逆序
    {
        if(head==NULL||head->next==NULL)
            return ERROR;
        else
        {
            LinkList p=head->next,q;
            head->next=NULL;
            while(p)
            {
                q=p->next;
                p->next=head;
                head=p;
                p=q;
            }
        }
        return OK;
    }
    int main()
    {
        int c,i,e,n;
        LinkList L;
        ListInit(L);
        cout<<"请输入链表元素的个数:"<<endl;
        cin>>n;
        ListCreat_R(L,n);
        cout<<"创建链表成功!"<<endl;
        cout<<"1.遍历单链表"<<endl;
        cout<<"2.按位置查找链表中的一个元素"<<endl;
        cout<<"3.在链表中插入一个元素"<<endl;
        cout<<"4.在链表中删除一个元素"<<endl;
        cout<<"5.就地逆序链表"<<endl;
        cout<<"请选择要完成的操作并输入对应序号:"<<endl;
        cin>>c;
        switch(c)
        {
            case 1:
                ListTraverse(L);
                break;
            case 2:
                cout<<"请输入要查找的元素位置:"<<endl;
                cin>>i;
                GetElem(L,i,e);
                cout<<e<<endl;
                break;
            case 3:
                cout<<"请输入要插入数值的位置:"<<endl;
                cin>>i;
                cout<<"请输入要插入的数值:"<<endl;
                cin>>e;
                ListInsert(L,i,e);
                cout<<"新链表为:"<<endl;
                ListTraverse(L);
                break;
            case 4:
                cout<<"请输入要删除元素的位置:"<<endl;
                cin>>i;
                ListDelete(L,i);
                cout<<"新链表为:"<<endl;
                ListTraverse(L);
                break;
            case 5:
                ListReverse(L);
                cout<<"新链表为:"<<endl;
                ListTraverse(L);
                break;
            default: break;
        }
        return 0;
    }

    选项一运行结果选项二运行结果选项三运行结果选项四运行结果选项五运行结果

    展开全文
  • 1、创建一个带头结点的单链表(头指针为head),且遍历此链表(输出链表中各结点的值); 2、查找单链表中的第i个结点,并输出结点元素的值; 3、在单链表中的第i个结点前插入一个结点值为e的正整数(从外部输入); 4...
  • 实验作业三:单链表

    2019-10-16 21:29:16
    题目: 利用尾插法建立一个单链表,从屏幕显示单链表元素列表;根据屏幕上的提示进行单链表的删除、插入等操作。 运行环境:Dev-C++ 5.11 ... 创建一个单链表 3. 插入节点 4. 输出已有...
  • 数据结构-单链表

    2019-12-24 16:59:56
    数据结构-单链表一单链表1:单链表的定义:2:尾插法创建单链表:3:头插法创建单链表:4:输出单链表上各结点值;5:在单链表上查找第i位置上的结点,将结点值输出;6:在单链表head中第i位置上插入元素值...
  • 1、创建一个带头结点的单链表(头指针为head),输出链表中各结点的值; 2、查找单链表中的第i个结点,并输出结点元素的值; 3、在单链表中的第i个结点前插入一个结点值为e的正整数(从外部输入) 4、删除单链表中...
  • class Node(object): #首先创建一个单链表,需要value域,和一个next指针域 def __init__(self,value=None,next=None): self.value,self.next = value,next class LinkList(object): #创建链表 def __init__...
  • /*首先创建并初始化一个带头结点的单链表一个空栈,依次把单链表中的元素取出压入栈中,在依次输出栈中的元素,就会和单链表中的元素顺序相反,但实际上这是假逆置,单链表中的数据顺序没有改变。*/ #include&...
  • 【问题描述】接收输入数据创建一个带头结点的单链表,查找某数据在此单链表中出现的次数并输出。 【输入形式】1.链表中数据的数量;2.链表中的数据元素;3.待查找的元素 【输出形式】待查找元素出现的次数 【样例...
  • 代码的主要目的:给单链表表示的向量u的某一个元素赋值,以给第1个元素赋值为-1为例,运行得到的结果是: ![图片说明](https://img-ask.csdn.net/upload/202004/15/1586945172_681469.png) 哪位大神帮忙看一下...
  • 下面是排序操作的函数,排序操作的我的思想是,创建一个单链表,然后将传入的单链表的每个节点的数据先与新单链表中的数据进行比较,从小到大确定位置,然后再用插入操作,将每个数据插入新的单链表中 ``` ...
  • } //无参构造函数,创建一个空表 SeqList(T a[], int n); //有参构造函数 void Insert(int i, T x); //在线性表中第i个位置插入值为x的元素 T Delete(int i); //删除线性表的第i个元素 void PrintList(); /...
  • 实现单链表的插入、删除和遍历运算,每种操作用一个函数实现。 插入操作:将一个新元素插入表中指定序号的位置。 删除操作:将指定序号的元素从表中删除。 遍历操作:从表头按次序输出所有元素的值,若是空表,则...
  • 1)请设计一个单链表的存储结构,实现单链表中基本运算算法。 编写程序实现单链表的各种基本运算(单链表元素类型可以自定义,如字符),在此基础上设计主程序完成以下功能。 § 创建单链表。 § 依次插入a,b,c,...
  • 题目 编写一组程序,用带头结点的有序单链表实现一个集合,放在“SetList....要求设计一个主程序,首先定义3个用有序单链表实现的集合A、B、C初始化为空集合,其元素的数据类型为整型;再依次读入若干整数创建一...
  • 链表的插入删除查找

    2020-10-25 17:29:00
    1.创建一个单链表,按顺序输入5个整数打印输出。 2.插入一个元素,通过键盘输入插入位置和数据,打印输出。 3.删除一个元素,从键盘读取删除元素位置,打印输出 4.查找一个数据,找到了,删除它,找不到在链表末尾...
  • 1、创建一个带头结点的单链表(头指针为head),且遍历此链表(输出链表中各结点的值); 2、查找单链表中的第i个结点,并输出结点元素的值; 3、在单链表中的第i个结点前插入一个结点值为e的正整数(从外部输入); 4...
  • 从键盘输入数据,创建一个初始链表。通过调用定义的基本操作函数来实现单链表上的插入、删除元素等操作。调试程序对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果。加深对有关算法的理解。 相关...
  • 数据结构实验2

    2018-09-18 20:36:43
    1、创建一个带头结点的单链表(头指针为head),且遍历此链表(输出链表中各结点的值); 2、查找单链表中的第i个结点,并输出结点元素的值; 3、在单链表中的第i个结点前插入一个结点值为e的正整数(从外部输入); 4...
  • 试验要求 掌握数据结构中线性表基础概念 熟练掌握线性表基础操作创建插入删除查找输出求长度及合并运算在次序存放结构上试验 熟练掌握链表多种操作和应用 试验内容 编写一个函数从一个给定次序表A中删除元素值在x...
  • 数据结构实验报告 PAGE PAGE 15 ...编写一个函数从一个给定的顺序表A中删除元素值在x到y之间的所有元素要求以较高效率来实现 试写一个算法在无头结点的动态单链表上实现线性表插入操作 设计一个统计选票的算法输出
  • //采用头插法创建一个单链表元素类型为整形,输入-9999时结束 Status CreateFromHead(LinkList &L); //初始条件:线性表L已经初始化 //采用尾插法创建一个单链表元素类型为整形,输入-9999时结束 Status ...
  • 实验一 线性表 1.... 实验内容 2.1 编写一个函数从一个给定的顺序表 A 中删除元素值在 x 到 y 之间的所 有元素要求以较高效率来实现 2.2 试写一个算法在无头结点的动态单链表上实现线性表插入操作 2
  • 而只是让每个元素知道它下一个元素的位置在哪里。 3.6.1顺序存储结构不足的解决 办法 55 3.6.2线性表链式存储结构定义 56 3.6.3头指针与头结点的异同 58 3.6.4线性表链式存储结构代码描述 58 3.7单链表的读取 60 3.8...
  • 请设计一个链表类,实现链表的初始化、插入、删除和打印操作。 节点的定义如下: ```cpp typedef int elementType; typedef struct node { elementType data; node* next; } LList, *PList; ``` 链表类的定义及...
  • DSDemo 数据结构

    2011-06-21 03:02:13
    (1)创建一个单链表(Crt_LinkList) (2)在单链表中插入一个结点(Ins_LinkList) (3)删除单链表中的一个结点(Del_LinkList) (4)两个有序链表求(Union) (5)归并两个有序链表(MergeList_L) (6)两个...
  • /* 先建立一个带头结点的单链表 */ for (i=0; i; i++) { p = (LinkList)malloc(sizeof(Node)); /* 生成新结点 */ p->data = rand()%100+1; /* 随机生成100以内的数字 */ p->next = (*L)->next; (*L)->...

空空如也

空空如也

1 2 3
收藏数 51
精华内容 20
关键字:

创建一个单链表并输出元素