算法-单链表做线性表的存储

问题描述

单链表做线性表的存储

以带头结点的单链表做线性表的存储表示,编写算法删除表中的偶数序号结点,使(a1,a2,a3,a4,a5...)变成(a1,a3,a5...)

解决方案

 #include<stdio.h>
#include<malloc.h>

typedef struct LNode {
    int data;
    struct LNode *next;
}*LinkList;

LinkList Creat_List(int n) {
    LinkList head,p,q;
    head = p = (LinkList)malloc(sizeof(LNode));
    for(int i = 1; i <= n; i++) {
        q = (LinkList)malloc(sizeof(LNode));
        q->data = i;
        p->next = q;
        p = q;
    }
    p->next = NULL;
    return head;
}

void Delete_evenLNode(LinkList head) { // 删除偶数位结点
    LinkList q,p = head;
    int i;
    for(i = 1; p->next; ++i) {
        if(i % 2 == 0) {
            q = p->next;
            p->next = q->next;
            free(q);
        }
        else p = p->next;
    }
}

void Print_List(LinkList head) {
    LinkList p = head->next;
    while(p != NULL) {
        printf("%d ",p->data);
        p = p->next;
    }
    printf("
");
}

void main () {
    LinkList head = Creat_List(16);
    Print_List(head);
    Delete_evenLNode(head);
    printf("删除偶数结点后 :
");
    Print_List(head);
}

解决方案二:

线性表的单链表存储学习
线性表的单链表存储(2)
线性表的静态单链表存储结构

时间: 2016-04-08

算法-单链表做线性表的存储的相关文章

c++ 单链表-单链表做电话本 在VC6.0中运行不了?

问题描述 单链表做电话本 在VC6.0中运行不了? /*用单链表的形式做成的电话本:功能:插入成员,删除成员,修改成员,搜索成员,输出整个链表*/ #include #include using namespace std; struct tel{ int number; char name[20]; tel *next;}; /*print the whole line*/ tel print(tel*head){ tel*p=new tel; p=head; while(p->next!=N

C++数据结构线性表的存储

问题描述 C++数据结构线性表的存储 输入姓名和地址信息,原样输出,例如 input liming beijing output liming beijing 求C++代码 我是新手,求大神罩

链表 算法-用链表实现超级跳表,在O( log n )内查找第n个元素

问题描述 用链表实现超级跳表,在O( log n )内查找第n个元素 2.2 如果有一个表从不修改,那么就可以使用一种更简单的方法来实现表的元素的查找.为了有效地访问第i个元素,向单链表的每个元素中添加第二个指针,使其指向表中其它元素来减少查找所需时间. (1) 请设计这样的"超级跳表"数据结构,请写出查找第i个元素的伪代码: (2) 分析上述算法的时间代价,说明它是O( log n )时间的. 注意:本题必须用链表实现,不允许用数组,也不允许用二叉树.

C++数据结构和算法每天一练(线性表)

#include <iostream> using namespace std;  class  ArrayLinerTable { public:       void InitLinerTable(int); //初始化线性表  void MakeEmpty() ;//清空线性表     int  GetLength() ;//获取长度  int  Locate(int) ;//获取制定位置的数据  ArrayLinerTable* Insert(int,int) ;//在制定位置插入一个

数据结构的C++实现之线性表之链式存储结构以及单链表反转

为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据ai,除了存储其自身的信息之外,还需存储一 个指示其直接后继的信息(即直接后继的存储位置).这两部分信息组成数据元素ai的存储映像,称为结点(Node).N个 结点链结成一个链表,即为线性表(a1,a2,...,an)的链式存储结构,因为此链表的每个节点中只包含一个指针域,所以叫 做单链表. 我们把链表中的第一个结点的存储位置叫做头指针,,为了更方便地对链表进行操作,如删除第一个结 点的特殊情况(第一个结点没有前驱,而要摘除一

简单介绍线性表以及如何实现双链表_java

线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列. 一.数组数组有上界和下界,数组的元素在上下界内是连续的. 存储10,20,30,40,50的数组的示意图如下: 数组的特点:数据是连续的:随机访问速度快. 数组中稍微复杂一点的是多维数组和动态数组.对于C语言而言,多维数组本质上也是通过一维数组实现的.至于动态数组,是指数组的容量能动态增长的数组:对于C语言而言,若要提供动态数组,需要手动实现:而对于C++而言,STL提供了Vector:对于Java而言,Collec

《数据结构与算法 C语言版》—— 2.3线性表的链式表示与实现

2.3线性表的链式表示与实现 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单.直观的公式来表示.然而,从另一方面来看,这个特点也造成了这种存储结构的弱点:在作插入或删除操作时,需移动大量元素.本节我们将讨论线性表的另一种表示方法--链式存储结构,其特点是用一组地址任意的存储单元存储线性表中的数据元素.由于它不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构所具有的弱点,但同时也失去了顺序表随机存取的特点

大话数据结构四:线性表的链式存储结构(单向循环链表)

1. 单向循环链表:将单链表尾结点的指针端由空指针改为指向头结点,使整个单链表形成一个环,这种头尾相接的单链表称为单向循环链表.   2. 单向循环链表和单链表实现的区别: 1.)添加一个结点到单向循环链表末尾时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为null. 2.)判断是否到达表尾时,单向循环链表可以判断该结点是否指向头结点,单链表只需要知道是否为null.   3.Java实现单向循环链表: // 单向循环链表 public class CircularLinked

大话数据结构二:线性表的链式存储结构(单链表)

1. 线性表的链式存储结构:指的是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的,这就意味着这些数据元素可以存在内存未被占用的任意位置. 2. 结点:结点由存放数据元素的数据域和存放后继结点地址的指针域组成. 1.)顺序存储结构中,每个数据元素只需要存数据元素的信息就可以了. 2.)链式存储结构中,除了要存储数据元素信息外,还要存储它的后继元素的存储地址. 3.)链表中第一个结点叫头结点,它的存储位置叫做头指针,它的数据域可以不存储任何信息,链表的最后一个结