数据结构上机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告
一.顺序表
要求:实现顺序表的初始化、在指定位置插入和删除元素。
算法思路:线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。顺序表的初始化操作就是为顺序表分配一个预定义大小的空间,并将线性表的当前长度设为“0”。线性表的插入操作是在线性表的第i-1个数据元素和第i个元素之间插入新的数据元素,使得长度为n的线性表变成长度为n+1的线性表,而删除恰好相反长度变为n-1的线性表,而且删除点后面的元素要往前移动一个位。
程序代码:
#include
#include
#define MAXSIZE 50
typedef char elemtype;
typedef struct //类型定义
{ elemtype v[MAXSIZE];
int last;
}SeqList;
SeqList *Init_SeqList() //初始化操作
{
SeqList *L;
L=(SeqList*)malloc(sizeof(SeqList));
L->last=-1;
return L;
}
void Create(SeqList *L) //建立顺序表
{
int i=0;
elemtype ch;
scanf("%c",&ch);
while(ch!='\n')
{
L->v[i++]=ch;
scanf("%c",&ch);
L->last=i-1;
}
}
void PrintL(SeqList *L) //输出顺序表
{
int i;
printf("此表为:\n");
for(i=0;i
{
printf("%c",L->v[i]);
}
printf("%c\n",L->v[i]);
}
void Length(SeqList *L) //顺序表长度函数{
printf("此表长度:\n%d",L->last+1);
printf("\n");
}
void insert(SeqList *L,int i,elemtype x) //插入函数
{
int j;
if(L->last==0)
printf("Error!\n");
if(i<1||i>L->last)
printf("Error!");
for(j=L->last;j>=i-1;j--)
L->v[j+1]=L->v[j];
L->v[i-1]=x;
L->last++;
PrintL(L);
Length(L);
}
void Delete(SeqList *L,int i) //删除函数
{
int j;
if(L->last==-1)
printf("Error!");
if(i<1||i>L->last+1)
printf("Error!");
for(j=i;j<=L->last;j++)
L->v[j-1]=L->v[j];
L->last--;
PrintL(L);
Length(L);
}
void main() //程序主函数
{
int i,j,k;
elemtype a,b;
SeqList *L;
L=Init_SeqList();
printf("建立顺序表:\n");
Create(L);
PrintL(L);
Length(L) ;
printf("\n");
printf("请输入你想插入的元素及其位置:\n");
scanf("%s %d",&b,&j);
insert(L,j,b);
printf("请输入你想删除的位置:\n");
scanf("%d",&k);
Delete(L,k);
}
程序运行:
二.单链表
要求:实现单链表的初始化、在指定位置插入和删除元素。
算法思路:线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素。因此,为了表现每个元素与后继元素的逻辑关系需要用到指针。单链表的插入就是先生成一
个数据域为插入元素的界点然后插入单链表中,并且修改前后节点的指针域,完成插入操作。反之删除链表元素时仅需修改前后两个元素的节点使之相连便可。
程序代码:
#define NULL 0
#include "stdlib.h"
#include"stdio.h"
typedef struct LNode
{
int data;
struct LNode *next;
} LNode, *LinkList;
void CreateList_L( LinkList *L);
void ShowList(LinkList *L);
LNode *GetElem(LinkList head);
void InsertList(LinkList *head);
void DeleteList(LinkList head);
void main()
{ LNode *L;
int j,loop=1;
printf("\n");
while(loop)
{
printf("1.建立单链表\n");
printf("2.在单链表插入元素\n");
printf("3.删除单链表元素\n");
printf("请选择序号(1-3): ");
scanf("%d",&j);
switch(j)
{case 1:
CreateList_L(&L);break;
case 2:
InsertList(&L);
break;
case 3:
DeleteList(L);
break;
}
printf("结束此程序吗?(0——结束1——继续):\n");
scanf("%d",&loop);
printf("\n");
}