视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
数据结构实验指导书——线性表的操作
2025-10-03 20:11:49 责编:小OO
文档
实验1  线性表的基本操作

一、实验目的

(1) 掌握线性表的逻辑特征;

(2) 掌握线性表顺序存储结构的特点,熟练掌握顺序表的基本运算;

(3) 熟练掌握线性表的链式存储结构定义及基本操作;

(4) 理解循环链表和双链表的特点和基本运算;

(5 )加深对顺序存储数据结构的理解和链式存储数据结构的理解,逐步培养解决实际问题的编程能力;

二、实验内容

1、创建有若干个元素(可以是整型数值)的顺序表,实现对顺序表的初始化,对已建立的顺序表插入操作、删除操作、遍历输出顺序表。

     要求各个操作均以函数的形式实现,在主函数中调用各个函数实现以下操作:

    (1)从键盘上依次输入21、18、30、75、42、56,创建顺序表,并输出顺序表中的各元素值。

    (2)分别在单链表的第3个位置插入67,给出插入成功或失败的信息,并输出此时顺序表中的各元素值。

    (3)删除顺序表中的第6个数据元素,给出删除成功或失败的信息,并输出此时顺序表中的各元素值。

    (4)查找顺序表中是否有75这个元素,如果有返回该元素在顺序表中的位序。

2、创建有若干个元素(可以是整型数值)的单链表,实现对单链表的初始化,对已建立的顺序表插入操作、删除操作、查找操作、遍历输出单链表表。

    要求各个操作均以函数的形式实现,在主函数中调用各个函数实现以下操作:

   (1)从键盘上依次输入21、18、30、75、42、56,创建单链表,并输出单链表中的各元素值。

   (2)分别在单链表的第4个位置,给出插入成功或失败的信息,并输出单链表中的各元素值。

   (3)删除单链表中的第2个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。

   (4)查找顺序表中的第五个元素并输出该元素的值。

三、参考代码

(1) 顺序表的操作

#include

#include

#define TRUE  1

#define FALSE  0

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef int Status;

#define INIT_SIZE 100 

  /*初始分配空间的大小*/

/*分配增量*/

typedef int ElemType;

typedef struct{

 int listsize;

}SqList;

/*ElemType elem[INIT_SIZE],注两者区别。存储空间的起始地址。*/

/*线性表中数据元素个数,即表长*/

/*线性表所申请的存储空间的大小*/

SqList CreateList_Sq(SqList L)

/*创建一个空的线性表*/

{

    if (!L.elem)    exit(ERROR);

    L.length=0;   /*表长为0*/

    L.listsize=INIT_SIZE;   

 /*申请的空间为初始大小*/

    return   L;

}

  Status InsertList_Sq(SqList *L, int i, ElemType e)

/*在线性表的第i个位置前插入元素e*/

{  int * newbase,*q,*p;

 值不合法!\\n");exit(ERROR);}

 当前空间已满,增加分配空间*/

}

SqList  DeleteList_Sq(SqList *L, int i, ElemType *e)

/* 删除线性表中的第i个元素,并获得所删元素的值*/

 值不合法!\\n");exit(ERROR);}

}

void Print_Sq(SqList L)

/*遍历顺序线性表*/

}

int GetLength(SqList L)

{

}

int equal(ElemType e1,ElemType e2)

/*判两个元素是否相等*/

{

}

int LocateElem_Sq(SqList L,ElemType e, int (* compare)(ElemType e1,ElemType e2))

}

void Getelem(SqList L,int i,ElemType *e)

{

}

int ListEmpty(SqList L)

{

  if (L.length==0) return 1;

else return 0;

}

{  int i;

}

(2)单链表的操作

  

  

/*定义结点类型*/

typedef struct  Node

    ElemType data;            /*单链表中的数据域 */

    struct Node *next;         /*单链表的指针域*/

}Node,*LinkedList;

  

  

/*单链表的初始化*/

  

    Node *L;   

    L = (Node *)malloc(sizeof(Node));   /*申请结点空间*/

    if(L == NULL)                       /*判断是否有足够的内存空间*/

 申请内存空间失败

 将next设置为NULL,初始长度为0的单链表*/

return L;

  

  

  

  

/*单链表的建立2,尾插法建立单链表*/

  

 int x;

 

    L = (Node *)malloc(sizeof(Node));   /*申请头结点空间  */

 初始化一个空链表  */

    r = L;                          /*r始终指向终端结点,开始时指向头结点*/

    {   

        Node *p;   

        p = (Node *)malloc(sizeof(Node));   /*申请新的结点 */

 结点数据域赋值 */

 将结点插入到表头L-->|1|-->|2|-->NULL */

        r = p;    

    }   

    return L;      

  

  

/*单链表的插入,在链表的第i个位置插入x的元素*/

  

    int tempi;                     /*pre为前驱结点*/

    pre = L;   

 查找第i个位置的前驱结点*/

 插入的结点为p*/

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

    return L;                              

  

  

/*单链表的删除,在链表中删除值为x的元素*/

  

    Node *p,*pre;                   /* pre为前驱结点,p为查找的结点*/

 查找值为x的元素

    {      

        pre = p;    

    }   

 删除操作,将其前驱next指向其后继。*/

    free(p);   

    return L;   

  

int GetElem_L(LinkedList L, int i, ElemType e) {

 /*L是带头结点的链表的头指针,以 e 返回第 i 个元素 */

 指向第一个结点,j为计数器 */

 顺指针向后查找,直到 p 指向第 i 个元素  */

 或 p 为空(P=最后一个元素内的指针域值)*/

    return 0;     /* 第 i 个元素不存在

 取得第 i 个元素

}

  

    LinkedList list,start;   

    list = LinkedListCreatT();   

    printf("\\n");   

  

    LinkedListInsert(list,i,x);   

    printf("\\n");   

    LinkedListDelete(list,x);    

    printf("\\n");   

}  下载本文

显示全文
专题