《C语言及程序设计》实践项目——链表初步

来源:互联网 发布:谁的java视频教程好 编辑:程序博客网 时间:2024/06/16 04:14

返回:贺老师课程教学链接

【项目1-链表的合并】
输入一个整数m,表示A链表的长度,再输入m个数作为A链表中的m个数据元素,建立链表A,其头指针为heada。输入一个整数n,表示B链表的长度,再输入n个数表示B链表中的n个数据元素,建立链表B,其头指针为headb。输入i、len、j,将要从单链表A中删除自第i个元素起的共len个元素,然后将单链表A插入到单链表B的第j个元素之前。最后输出操作后的链表B。
例如,输入:

11
13 5 14 62 3 43 71 5 72 34 5 (11个数构成链表A)
15
5 20 3 53 7 81 5 42 6 8 4 6 9 10 23(15个数构成链表B )
1 3 5(从单链表A中删除自第1个元素起的共3个元素,然后将单链表A插入到单链表B的第5个元素之前)

输出:

5 20 3 53 62 3 43 71 5 72 34 5 7 81 5 42 6 8 4 6 9 10 23

[参考解答]


【项目2-拆分链表】
编写一个函数将一个头指针为a的单链表A分解成两个单链表A和B,其头指针分别为a和b,使得A链表中含有原链表A中序号为奇数的元素,而B链表中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。例,建立长度为7,元素为1 2 3 4 5 6 7的链表后,经拆分,得到两个数组A和B,其元素分别是1 3 5 7 和2 4 6

[参考解答]


【项目3 - 改造链表】
下面是一个建立动态链表的程序。阅读程序,然后按要求改造程序。

#include  <iostream>  using namespace std;  #include <stdio.h>#include <malloc.h>#define N 5typedef struct NODE{    int data;            //结点的数据    struct NODE *next;  //指向下一结点} Node;Node *head=NULL;    //将链表头定义为全局变量,以便于后面操作void make_list();   //建立链表void out_list();    //输出链表int main( ){    make_list();    out_list();    return 0;}void make_list(){    int n;    Node *p;    printf("输入若干正数(以0或一个负数结束)建立链表:" );    scanf("%d", &n);    while(n>0)   //输入若干正数建立链表,输入非正数时,建立过程结束    {        p=(Node*)malloc(sizeof(Node));  //新建结点        p->data=n;        p->next=head;  //新建的结点指向原先的链表头        head=p;    //链表头赋值为新建的节点,这样,新结点总是链表头        scanf("%d", &n);      //输入下一个数,准备建立下一个结点    }    return;}void out_list(){    Node *p=head;    printf("链表中的数据为:\n");    while(p!=NULL)    {        printf("%d ", p->data);        p=p->next;    }    printf("\n");    return;}

在上面的程序基础上定义下面的函数,实现相应的功能。
为简便起见,每编写一个函数,立刻在main函数中调用进行测试。
(1)编写make_list2()函数建立链表,使建立链表时,后输入的数据,将新输入的数字对应的结点放在链表末尾。若输入为3 5 2 9 4 7 0,建立的链表为:

(2)编写函数void search(int x),输出链表中是否有值为x的结点。
(3)编写函数delete_first_node(),删除链表中的第一个结点。
(4)编写函数delete_node(int x),删除结点值为x的结点。
(5)编写make_list3()函数建立链表,使建立链表时,使结点中的数据呈现升序。若输入为3 5 2 9 4 7 0,建立的链表为:

(6)编写函数void insert(int x),将值为x的结点插入到由make_list3建立起来的有序链表中。

[参考解答]


【项目4-链表版通信录】
利用链表存储数据,写一个通信录程序,能够记录多个联系人的编号、姓名、性别、联系电话、地址,完成数据的录入、添加、删除、修改以及查询功能。
[参考解答]

0 0
原创粉丝点击