实验内容

1.编写一个程序sqlist.cpp,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型ElemType为char),并在此基础上设计一个程序exp2-1.cpp完成以下功能。
(1)初始化顺序表L。
(2)依次插入a、b、c、d、e元素。
(3)输出顺序表L。
(4)输出顺序表L的长度。
(5)判断顺序表L是否为空。
(6)输出顺序表L的第3个元素。
(7)输出元素a的位置。
(8)在第4个元素位置上插入f元素。
(9)输出顺序表L。
(10)删除顺序表L的第3个元素。
(11)输出顺序表L。
(12)释放顺序表L。
2.编写一个程序linklist.cpp,实现单链表的各种基本运算和整体建表算法(假设单链表的元素类型ElemType为char),并在此基础上设计一个程序exp2-2.cpp完成以下功能。
(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)释放单链表h。

代码实现

1、
sqlist.cpp

#include <iostream>
#include <stdio.h>
#include <malloc.h>
using namespace std;
typedef char ElemType;
#define Maxsize 50
typedef struct
{  ElemType data[Maxsize];  int length;
}SqList;
void InitList(SqList *&L)  //初始化线性表
{  L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间  L->length=0;                        //置空线性表长度为0
}
void DestroyList(SqList *L)  //销毁线性表
{  free(L);
}
bool ListEmpty(SqList *L) //判断线性表是否为空
{  return (L->length==0);
}
int ListLength(SqList *L) //求线性表的长度
{  return (L->length);
}
void DispList(SqList *L) //输出线性表
{  int i;  if(L->length==0) return;  for(i=0;i<L->length;i++)  printf("%c ",L->data[i]);  printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e)  //求线性表中某个元数的值
{  if(i<1||i>L->length)  return false;  e=L->data[i];  return true;
}
int LocateElem (SqList *L,ElemType e)  //按元素值查找
{  int i=0;  while(i<L->length&&L->data[i]!=e)  i++;  if(i>=L->length)  return 0;  else  return i+1 ;
}
bool ListInsert(SqList *L,int i,ElemType e)  //插入数据元素
{  int j;  if(i<1||i>L->length)  return false;  i--;  for(j=L->length;j>i;j--)  L->data[j]=L->data[j-1];  L->data[i]=e;  L->length++;  return true;
}
bool ListDelete(SqList *L,int i,ElemType e)
{  //int j;  if(i<1||i>L->length)  return false;  i--;  e=L->data[i];  for(;i<L->length-1;i++)  {  L->data[i]=L->data[i+1];  }  L->length--;  return true;
}

exp2-1.cpp

#include <iostream>
#include <stdio.h>
#include <malloc.h>
using namespace std;
typedef char ElemType;
#define Maxsize 50
typedef struct
{  ElemType data[Maxsize];  int length;
}SqList;
void InitList(SqList *&L)  //初始化线性表
{  L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间  L->length=0;                        //置空线性表长度为0
}
void DestroyList(SqList *L)  //销毁线性表
{  free(L);
}
bool ListEmpty(SqList *L) //判断线性表是否为空
{  return (L->length==0);
}
int ListLength(SqList *L) //求线性表的长度
{  return (L->length);
}
void DispList(SqList *L) //输出线性表
{  int i;  if(L->length==0) return;  for(i=0;i<L->length;i++)  printf("%c ",L->data[i]);  printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e)  //求线性表中某个元数的值
{  if(i<1||i>L->length)  return false;  e=L->data[i];  return true;
}
int LocateElem (SqList *L,ElemType e)  //按元素值查找
{  int i=0;  while(i<L->length&&L->data[i]!=e)  i++;  if(i>=L->length)  return 0;  else  return i+1 ;
}
bool ListInsert(SqList *L,int i,ElemType e)  //插入数据元素
{  int j;  if(i<1||i>L->length)  return false;  i--;  for(j=L->length;j>i;j--)  L->data[j]=L->data[j-1];  L->data[i]=e;  L->length++;  return true;
}
bool ListDelete(SqList *L,int i,ElemType e)
{  //int j;  if(i<1||i>L->length)  return false;  i--;  e=L->data[i];  for(;i<L->length-1;i++)  {  L->data[i]=L->data[i+1];  }  L->length--;  return true;
}
int main()
{  SqList *L;  ElemType e;  cout<<"顺序表的基本运算:"<<endl;  cout<<"(1)初始化顺序表L:"<<endl;  InitList(L);  cout<<"(2)依此插入a,b,c,d,e元素:"<<endl;  ListInsert(L,1,'a');  ListInsert(L,2,'b');  ListInsert(L,3,'c');  ListInsert(L,4,'d');  ListInsert(L,5,'e');  cout<<"(3)输出顺序表L:"<<endl;  DispList(L);  cout<<"(4)顺序表L长度为:"<<ListLength(L)<<endl;  printf("(5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));  GetElem(L,3,e);  cout<<"(6)顺序表L的第3个元素是:"<<e<<endl;  cout<<"(7)元素a的位置:"<<LocateElem(L,'a')<<endl;  cout<<"(8)在第4个元素位置上插入f元素:"<<endl;  ListInsert(L,4,'f');  cout<<"(9)输出顺序表L:"<<endl;  DispList(L);  cout<<"(10)删除h的第3个元素:"<<endl;  ListDelete(L,3,e);  cout<<"(11)输出顺序表L:"<<endl;  DispList(L);  cout<<"(12)释放顺序表L:"<<endl;  DestroyList(L);
}

2、
linklist.cpp

#include <iostream>
#include <stdio.h>
#include <malloc.h>
using namespace std;
typedef char ElemType;
//#define Maxsize 50
typedef struct  LNode //定义单链表结点类型
{  ElemType data;  struct LNode *next;
}LinkList;
void InitList(LinkList *&L)  //初始化单链表
{  L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点  L->next=NULL;
}
void DestroyList(LinkList *L)  //销毁单链表
{  LinkList *p=L,*q=L->next;  while(q!=NULL)  {  free(p);  p=q;  q=p->next;  }  free(p);
}
bool ListEmpty(LinkList *L) //判断单链表是否为空
{  return (L->next==NULL);
}
int ListLength(LinkList *L) //求单链表的长度
{  LinkList *p=L;  int i=0;  while(p->next!=NULL)  {  i++;  p=p->next;  }  return (i);
}
void DispList(LinkList *L) //输出单链表
{  LinkList *p=L->next;  // int i=0;  while(p->next!=NULL)  {  printf("%c ",p->data);  p=p->next;  }  printf("%c ",p->data);  printf("\n");
}
bool GetElem(LinkList *L,int i,ElemType &e)  //求单链表中某个元数的值
{  LinkList *p=L;  int j=0;  while(p!=NULL&&j<i)  {  j++;  p=p->next;  }  if(p==NULL)  return false;  else  {  e=p->data;  return true;  }
}
int LocateElem (LinkList *L,ElemType e)  //按元素值查找
{  LinkList *p=L;  int j=0;  while(p!=NULL&&p->data==e)  {  j++;  p=p->next;  }  if(p==NULL)  return 0;  else  {  return (j+1);  }
}
bool ListInsert(LinkList *L,int i,ElemType e)  //插入数据元素
{  LinkList *p=L,*s;  int j=0;  while(p!=NULL&&j<i-1)  {  j++;  p=p->next;  }  if(p==NULL)  return false;  else  {  s=(LinkList *)malloc(sizeof(LinkList));  s->data=e;  s->next=p->next;  p->next=s;  return true;  }
}
bool ListDelete(LinkList *L,int i,ElemType &e)
{  LinkList *p=L,*s;  int j=0;  while(p!=NULL&&j<i-1)  {  j++;  p=p->next;  }  if(p==NULL)  return false;  else  {  s=p->next;  if(s==NULL)  return false;  e=s->data;  p->next=s->next;  free(s);  return true;  }
}

exp2-2.cpp

#include <iostream>
#include <stdio.h>
#include <malloc.h>
using namespace std;
typedef char ElemType;
//#define Maxsize 50
typedef struct  LNode //定义单链表结点类型
{  ElemType data;  struct LNode *next;
}LinkList;
void InitList(LinkList *&L)  //初始化单链表
{  L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点  L->next=NULL;
}
void DestroyList(LinkList *L)  //销毁单链表
{  LinkList *p=L,*q=L->next;  while(q!=NULL)  {  free(p);  p=q;  q=p->next;  }  free(p);
}
bool ListEmpty(LinkList *L) //判断单链表是否为空
{  return (L->next==NULL);
}
int ListLength(LinkList *L) //求单链表的长度
{  LinkList *p=L;  int i=0;  while(p->next!=NULL)  {  i++;  p=p->next;  }  return (i);
}
void DispList(LinkList *L) //输出单链表
{  LinkList *p=L->next;  // int i=0;  while(p->next!=NULL)  {  printf("%c ",p->data);  p=p->next;  }  printf("%c ",p->data);  printf("\n");
}
bool GetElem(LinkList *L,int i,ElemType &e)  //求单链表中某个元数的值
{  LinkList *p=L;  int j=0;  while(p!=NULL&&j<i)  {  j++;  p=p->next;  }  if(p==NULL)  return false;  else  {  e=p->data;  return true;  }
}
int LocateElem (LinkList *L,ElemType e)  //按元素值查找
{  LinkList *p=L;  int j=0;  while(p!=NULL&&p->data==e)  {  j++;  p=p->next;  }  if(p==NULL)  return 0;  else  {  return (j+1);  }
}
bool ListInsert(LinkList *L,int i,ElemType e)  //插入数据元素
{  LinkList *p=L,*s;  int j=0;  while(p!=NULL&&j<i-1)  {  j++;  p=p->next;  }  if(p==NULL)  return false;  else  {  s=(LinkList *)malloc(sizeof(LinkList));  s->data=e;  s->next=p->next;  p->next=s;  return true;  }
}
bool ListDelete(LinkList *L,int i,ElemType &e)
{  LinkList *p=L,*s;  int j=0;  while(p!=NULL&&j<i-1)  {  j++;  p=p->next;  }  if(p==NULL)  return false;  else  {  s=p->next;  if(s==NULL)  return false;  e=s->data;  p->next=s->next;  free(s);  return true;  }
}
int main()
{  LinkList *h;  ElemType e;  cout<<"单链表的基本运算如下:"<<endl;  cout<<"(1)初始化单链表h:"<<endl;  InitList(h);  cout<<"(2)依此采用尾插法插入a,b,c,d,e元素:"<<endl;  ListInsert(h,1,'a');  ListInsert(h,2,'b');  ListInsert(h,3,'c');  ListInsert(h,4,'d');  ListInsert(h,5,'e');  cout<<"(3)输出单链表h:"<<endl;  DispList(h);  cout<<"(4)单链表h长度为:"<<ListLength(h)<<endl;  printf("(5)单链表h为%s\n",(ListEmpty(h)?"空":"非空"));  GetElem(h,3,e);  cout<<"(6)单链表h的第3个元素是:"<<e<<endl;  cout<<"(7)元素a的位置:"<<LocateElem(h,'a')<<endl;  cout<<"(8)在第4个元素位置上插入f元素:"<<endl;  ListInsert(h,4,'f');  cout<<"(9)输出单链表h:"<<endl;  DispList(h);  cout<<"(10)删除单链表h的第3个元素:"<<endl;  ListDelete(h,3,e);  cout<<"(11)输出单链表h:"<<endl;  DispList(h);  cout<<"(12)释放单链表h:"<<endl;  DestroyList(h);
}

结果截图

1、

2.

(数据结构)1.实现顺序表的各种基本运算的算法 2.实现单链表的各种基本运算的算法相关推荐

  1. 【数据结构与算法】判断单链表是否有环的算法

    带环链表 这里的带环单链表可不是环形单链表,这个环可能是我们不想要的,所以需要检测. 我们就不假设有一个打结状的环了,那样跑到哪里去也不清楚,这里的"带环链表",环必然是在末端. ...

  2. 数据结构之——《顺序表》

    数据结构之--<顺序表> 1.含义 2.分类 3.接口函数实现 4.顺序表的优缺点 1.含义 顺序表示用一段纹理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组 ...

  3. 【数据结构】【顺序表】 SqList *L与SqList*L的区别

    [数据结构][顺序表] SqList *&L与SqList*L的区别 显然,对于顺序表的抽象数据模型中的函数,其参数使用各不相同. SqList *&L的情况 它的意思是,L是对Lis ...

  4. 数据结构之动态顺序表(含游戏菜单)

    上一篇文章我们谈了数据结构的静态顺序表,以及实现了静态顺序表,具体可以看我的上一篇文章->>>数据结构之静态顺序表. 我们可以知道,静态顺序表的缺点是:  因为使用的是定长数组,所以 ...

  5. 数据结构与算法 完整版单链表(附GIF)

    因为博主认为单链表是非常重要的数据结构,能够熟练使用单链表的话后面的数据结构会越学越轻松,所以博主就把这篇博客做的细致一点,不是很好懂的地方做成 gif 动画,希望大家能理解期中代码的含义 学习链表的 ...

  6. 需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是 。 A 单链表 B 静态链表 C 线性链表 D 顺序存储结构

    1.需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是 . A 单链表 B 静态链表 C 线性链表 D 顺序存储结构 答案:B 2.静态链表中指针表示的是() A 内存地址 B下一元素地 ...

  7. 实现单链表的各种基本运算的算法

    内容:编写一个程序,实现单链表的各种基本算法和整体建表算法,并在此基础上设计一个程序,完成以下功能. 单链表的基本运算如下: (1)初始化单链表h. (2)依次采用尾插法插入a,b,c,d,e元素. ...

  8. 数据结构(C语言)顺序表的定义及基本操作

    顺序表的定义及基本操作 一.数据结构:顺序表的定义,创建,基本运算,实现 二.全部代码 定义顺序表 #include<stdio.h> #include<malloc.h> # ...

  9. java数据结构实验一顺序表,java数据结构实验代码之升序顺序表

    java数据结构实验代码之升序顺序表 数据结构实验报告 学院:管理学院 班级:13电子商务(1)班 姓名:廖秋君 学号:3213004779 2014年 10月 23 日 目录 一.需求分析----- ...

最新文章

  1. 人工智能时代,教育如何做人工智能的“弄潮儿”?
  2. 参加第二届中国网络营销行业大会会议记录
  3. 认识MySQL Replication
  4. 顺序查找计时函数C语言,用C语言编二分查找
  5. json 反序列化 父子类型_Json的序列化和反序列化
  6. 13行满分代码:1038 统计同成绩学生 (20分)
  7. 剩余 大小 查看内存_谈谈内存压缩那些事
  8. java 压缩 乱码_如何解决java压缩文件乱码问题
  9. 路飞学城-Python开发集训-第2章
  10. office向快速访问工具栏加快速操作
  11. matlab求t分布的p值,在R中如何求给定分布和统计量的p-value
  12. HSQL之窗口-聚合-分析函数
  13. 利用python构建信用卡评分
  14. linux nodejs 502错误,node.js应用程序与nginx 502错误的网关错误
  15. Mac实现ts文件转为mp4文件
  16. 办公必备:4个在线文档格式转换网站
  17. java swing 颜色_Java Swing按钮颜色
  18. PUG转HTML格式
  19. 微信小程序 图片左右滑动 swiper
  20. perl 串口 linux,Perl的串口操作Win32::SerialPort

热门文章

  1. python图像处理(旋转)
  2. Jone.Net代码生成器发布最新版源码
  3. 为什么网站服务器会出现500错误代码?该怎么修复?
  4. pinyin4j的基础使用
  5. 原来这就是笔杆子公文写作材料经典提纲汇编
  6. Choosing Colormaps in Matplotlib 颜色名称
  7. 二阶RC等效电路模型参数在线辨识与SOC、SOP联合估计,适应多工况
  8. nodejs 查看下载文件路径_QQ、迅雷、新浪等App下载文件保存路径以及隐藏文件提取...
  9. “第一次亲密接触”——我与业务初相遇
  10. pfSense功能简介