厦门大学数据结构期末考试单链表问题

因为过几天要去参加厦门大学的夏令营,提前刷了下厦门大学往年的期末考试试卷。

卷中有这么一道题目:

有一个单链表,其结点的元素值以递增顺序排列,给出数据结构,并编写一个算法删除该单链表中元素值相同的结点。

算法如下:

从头到尾扫描单链表,若当前结点和后继结点的值不相同,则指针后移,若相同,则删除该后继结点。

 1 #include "stdio.h"
 2
 3 typedef struct Node{
 4     int data;
 5     struct Node *next;
 6 }Node, *LinkList;
 7
 8 void InitList(LinkList *L)
 9 {
10     (*L) = (LinkList)malloc(sizeof(Node));
11     (*L)->next = NULL;
12 }
13
14 void creat(LinkList p)
15 {
16     Node *s;
17     int flag = 1, num;
18     while(flag)
19     {
20         scanf("%d", &num);
21         if(num >= 0)
22         {
23             s = (LinkList)malloc(sizeof(Node));
24             s->data = num;
25             s->next = p->next;
26             p->next = s;
27         }
28         else
29         {
30             flag = 0;
31         }
32     }
33 }
34
35 void print(LinkList p)
36 {
37     Node *s = p->next;
38     if(s == NULL)
39         printf("NULL\n");
40     while(s != NULL)
41     {
42         printf("%d ", s->data);
43         s = s->next;
44     }
45     printf("\n");
46 }
47
48 void deleta_same(LinkList p)
49 {
50     Node *q, *s = p->next;
51     if(s == NULL)
52         printf("NULL\n");
53     while(s->next != NULL)
54     {
55         if(s->data != s->next->data)
56             s = s->next;
57         else
58         {
59             q = s->next;
60             s->next = q->next;
61             free(q);
62         }
63     }
64 }
65
66 int main()
67 {
68     Node *p;
69     InitList(&p);
70     creat(p);
71     print(p);
72     deleta_same(p);
73     print(p);
74 }
时间: 2024-10-11 04:42:07

厦门大学数据结构期末考试单链表问题的相关文章

PHP数据结构之实现单链表

学习PHP中,学习完语法,开始尝试实现数据结构,今天实现单链表 <?php class node //节点的数据结构 { public $id; public $name; public $next; public function __construct($id,$name) //构造函数 { $this->id=$id; $this->name=$name; $this->next=null; } } class linklist //链表的数据结构 { private $he

数据结构学习之单链表基本操作

数据结构学习之单链表基本操作 0x1 前言 今天实验课,学习了下单链表的写法,这里记录下. 0x2 正文 题目要求如下: 本实验的单链表元素的类型为char,完成如下实验要求: (1)初始化单链表h (2)采用尾插法依次插入a.b.c.d.e (3)输出单链表h (4)输出单链表h的长度 (5)判断单链表h是否为空 (6)输出单链表h的第3个元素 (7)输出元素a的逻辑位置 (8)在第4个元素位置上插入元素f (9)输出单链表h (10)删除单链表h的第3个元素 (11)输出单链表h (12)释

数据结构之_单链表的实现

数据结构之_单链表的实现 1.基本概念 链式存储定义 为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息. 单链表 线性表的链式存储结构中,每个节点中只包含一个指针域,这样的链表叫单链表. 通过每个节点的指针域将线性表的数据元素按其逻辑次序链接在一起(如图). 概念解释: 表头结点 链表中的第一个结点,包含指向第一个数据元素的指针以及链表自身的一些信息 数据结点 链表中代表数据元素的结点,包含指向下一个数据元素的指针和数据元素的信息

数据结构期末考试算法

1.设计一个高效的算法,从顺序表L中删除所有值为x的元素,要求时间复杂度为O(n),空间复杂度为O(1). //p71 #define MAXSIZE 100 typedef struct { ElemType elem[MAXSIZE]; int last; }SeqList; void delx(SeqList * L,ElemType x) { int i = 0; int j = 0; while(i <= L->last) { if(L->elem[i]!=x) { L->

【数据结构】顺序存储单链表

数据结构之单链表的顺序存储实现 闲来无事,回顾下以前学过的数据结构,写个玩玩,理论的东西就不多说了,网上一搜一大堆: 重要的是需要掌握这种数据结构的思想,整个数据结构这门课最重要的也是思想! 下面是代码: //====================================================================== // // Copyright (C) 2014-2015 SCOTT // All rights reserved // // filename:

数据结构基础(8) --单链表的设计与实现(1)之基本操作

链表简介 数组的缺点: 1.元素插入:除了在数组的末尾插入元素之外,在数组的其他任何位置插入元素都需要进行数组元素的频繁移动(插入位置之后的元素都需往后移动), 时间复杂度约为O(N); 2.数组的删除:除了在数组的末尾删除元素之外,在数组的其他任何位置删除元素都需要进行数组元素的频繁移动(删除位置之后的元素都需往前移动), 时间复杂度也为O(N); 链表的特点: 由于在链表中插入/删除元素都不需要进行数据的移位, 只需要O(1)时间完成, 因此链表适用于频繁插入与删除的情况; 但是链表也有缺点

【C语言数据结构】循环单链表

CircleLinkList.h #ifndef CIRCLE_LINK_LIST #define CIRCLE_LINK_LIST //链表节点 typedef struct _CircleLinkListNode {     struct _CircleLinkListNode *next; }CircleLinkListNode; //循环单链表 typedef void CircleLinkList; /*  * 创建循环单链表  * @return 返回循环单链表的指针  */ Cir

【C语言数据结构】静态单链表

StaticLinkLinst.h #ifndef STATIC_LINKLIST_H #define STATIC_LINKLIST_H typedef void StaticLinkListNode;    //静态单链表节点 typedef void StaticLinkList;        //静态单链表 /*  * 创建静态单链表  * @param capacity 静态单链表的最大容量  * @return 返回静态单链表的指针  */ StaticLinkList* Stat

C++ 数据结构学习二(单链表)

模板类 //LinkList.h 单链表#ifndef LINK_LIST_HXX#define LINK_LIST_HXX#include <iostream>using namespace std; template<class T>struct Node{ T data; Node * next;}; template<class T>class LinkList{ public: LinkList(); //无参构造函数,建立只有头结点的空链表 LinkList