华南农业大学数据结构答案(实验1)
更新时间:2023-09-06 00:37:01 阅读量: 教育文库 文档下载
华南农业大学数据结构实验1答案,仅供参考。
01顺序线性表的基本操作
#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int
typedef struct
{
int *elem;
int length;
int listsize;
}SqList;
int InitList_Sq(SqList &L)
{
// 算法2.3,构造一个空的线性表L,该线性表预定义大小为LIST_INIT_SIZE L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
int Load_Sq(SqList &L)
{
// 输出顺序表中的所有元素
int i;
if(L.length==0) printf("The List is empty!"); // 请填空
else
{
printf("The List is: ");
for(i=0;i<L.length;i++) printf("%d ",L.elem[i]); // 请填空
}
printf("\n");
return OK;
}
int ListInsert_Sq(SqList &L,int i,int e)
{
// 算法2.4,在顺序线性表L中第i个位置之前插入新的元素e
华南农业大学数据结构实验1答案,仅供参考。
if(i<1||i>L.length+1) return ERROR;
ElemType *newbase,*q,*p;
if(L.length>=L.listsize)
{
newbase=(ElemType
*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
int ListDelete_Sq(SqList &L,int i, int &e)
{
// 算法2.5,在顺序线性表L中删除第i个位置的元素,并用e返回其值
ElemType *p,*q;
if(i<1||i>L.length) return ERROR;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length;
return OK;
}
int main()
{
SqList T;
int a, i;
ElemType e, x;
if(InitList_Sq(T)) // 判断顺序表是否创建成功
{
printf("A Sequence List Has Created.\n");
}
while(1)
{
printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n");
华南农业大学数据结构实验1答案,仅供参考。
请填空
请填空
}
}
scanf("%d",&a); switch(a) { case 1: scanf("%d%d",&i,&x); if(!ListInsert_Sq(T,i,x)) printf("Insert Error!\n"); // 判断i值是否合法, } else printf("The Element %d is Successfully Inserted!\n", x); break; case 2: scanf("%d",&i); if(!ListDelete_Sq(T,i,e)) printf("Delete Error!\n"); // 判断i值是否合法, else printf("The Element %d is Successfully Deleted!\n", e); break; case 3: Load_Sq(T); break; case 0: return 1;
02合并顺序表
#include"stdio.h"
#include"malloc.h"
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int
typedef struct
{
int *elem;
int length;
int listsize;
}SqList;
int InitList_Sq(SqList &L)
{
// 算法2.3,构造一个空的线性表L,该线性表预定义大小为LIST_INIT_SIZE
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
L.length=0;
华南农业大学数据结构实验1答案,仅供参考。
L.listsize=LIST_INIT_SIZE;
return OK;
}
int Load_Sq(SqList &L)
{
int i;
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
return OK;
}
int ListLength(SqList L)
{
return L.length;
}
int GetElem(SqList L,int i,ElemType &e)
{
e=L.elem[i-1];
return OK;
}
int ListInsert_Sq(SqList &L,int i,int e)
{
if(i<1||i>L.length+1) return ERROR;
ElemType *newbase,*q,*p;
if(L.length>=L.listsize)
{
newbase=(ElemType
*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
void MergeList(SqList La,SqList Lb,SqList &Lc)
华南农业大学数据结构实验1答案,仅供参考。
int i,j,k,La_len,Lb_len;
int ai,bj;
i=j=1;k=0;
InitList_Sq(Lc);
La_len=ListLength(La);
Lb_len=ListLength(Lb);
while((i<=La_len)&&(j<=Lb_len))
{
GetElem(La,i,ai);
GetElem(Lb,j,bj);
if(ai<=bj)
{
ListInsert_Sq(Lc,++k,ai);
++i;
}
else
{
ListInsert_Sq(Lc,++k,bj);
++j;
}
}
while(i<=La_len)
{
GetElem(La,i++,ai);
ListInsert_Sq(Lc,++k,ai);
}
while(j<=Lb_len)
{
GetElem(Lb,j++,bj);
ListInsert_Sq(Lc,++k,bj);
}
Load_Sq(Lc);
}
int main()
{
int an,bn,i,e;
SqList La,Lb,Lc;
InitList_Sq(La);
scanf("%d",&an);
for(i=1;i<=an;i++)
{
scanf("%d",&e);
华南农业大学数据结构实验1答案,仅供参考。
}
} printf("List A:"); Load_Sq(La); InitList_Sq(Lb); scanf("%d",&bn); for(i=1;i<=bn;i++) { scanf("%d",&e); ListInsert_Sq(Lb,i,e); } printf("List B:"); Load_Sq(Lb); printf("List C:"); MergeList(La,Lb,Lc);
03顺序表逆置
#include"stdio.h"
#include"malloc.h"
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
int InitList_Sq(SqList &L)
{
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
int ListInsert_Sq(SqList &L,int i,int e)
{
华南农业大学数据结构实验1答案,仅供参考。
if(i<1||i>L.length+1) return ERROR;
ElemType *newbase,*q,*p;
if(L.length>=L.listsize)
{
newbase=(ElemType
*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
int ListDelete_Sq(SqList &L,int i, int &e)
{
ElemType *p,*q;
if(i<1||i>L.length) return ERROR;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length;
return OK;
}
int Load_Sq(SqList &L)
{
int i;
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
return OK;
}
int main()
{
SqList T;
int n,i,l;
ElemType e,x;
华南农业大学数据结构实验1答案,仅供参考。
}
InitList_Sq(T); scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&e); ListInsert_Sq(T,i,e); } printf("The List is:"); Load_Sq(T); l=n/2; for(i=l;i>0;i--) { ListDelete_Sq(T,n+1-i,x); ListDelete_Sq(T,i,e); ListInsert_Sq(T,i,x); ListInsert_Sq(T,n+1-i,e); } printf("The turned List is:"); Load_Sq(T);
04链式线性表的基本操作
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define ElemType int
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
int CreateLink_L(LinkList &L,int n){
// 创建含有n个元素的单链表
LinkList p,q;
int i;
ElemType e;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL; // 先建立一个带头结点的单链表
q = (LinkList)malloc(sizeof(LNode));
华南农业大学数据结构实验1答案,仅供参考。
q = L;
for (i=0; i<n; i++) {
scanf("%d", &e);
p = (LinkList)malloc(sizeof(LNode)); // 生成新结点
p->data=e;
p->next=q->next;
q->next=p;
q=q->next;
}
return OK;
}
int LoadLink_L(LinkList &L){
// 单链表遍历
LinkList p = L->next;
if(p==NULL)printf("The List is empty!"); // 请填空
else
{
printf("The LinkList is:");
while(p!=NULL) // 请填空
{
printf("%d ",p->data);
p=p->next; // 请填空
}
}
printf("\n");
return OK;
}
int LinkInsert_L(LinkList &L,int i,ElemType e){
LNode *p=L,*s;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1) return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;s->next=p->next;
p->next=s;
return OK;
}
华南农业大学数据结构实验1答案,仅供参考。
int LinkDelete_L(LinkList &L,int i, ElemType &e){
LNode *p=L,*q;
int j=0;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j<i-1) return ERROR;
q=p->next;p->next=q->next;
e=q->data;
free(q);
return OK;
}
int main()
{
LinkList T;
int a,n,i;
ElemType x, e;
printf("Please input the init size of the linklist:\n");
scanf("%d",&n);
printf("Please input the %d element of the linklist:\n", n);
if(CreateLink_L(T,n)) // 判断链表是否创建成功,请填空
{
printf("A Link List Has Created.\n");
LoadLink_L(T);
}
while(1)
{
printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n");
scanf("%d",&a);
switch(a)
{
case 1: scanf("%d%d",&i,&x);
if(!LinkInsert_L(T,i,x)) printf("Insert Error!\n"); // 判断i值是否合法,请填空
else printf("The Element %d is Successfully Inserted!\n", x);
break;
case 2: scanf("%d",&i);
if(!LinkDelete_L(T,i,e)) printf("Delete Error!\n"); // 判断i值是否合法,请填空
else printf("The Element %d is Successfully Deleted!\n", e);
华南农业大学数据结构实验1答案,仅供参考。
}
} } break; case 3: LoadLink_L(T); break; case 0: return 1;
05合并链表
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define ElemType int
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
int CreateLink_L(LinkList &L,int n){
// 创建含有n个元素的单链表
LinkList p,q;
int i;
ElemType e;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL; // 先建立一个带头结点的单链表 q = (LinkList)malloc(sizeof(LNode));
q = L;
for (i=0; i<n; i++) {
scanf("%d", &e);
p = (LinkList)malloc(sizeof(LNode)); // 生成新结点
p->data=e;
p->next=q->next;
q->next=p;
q=q->next;
}
return OK;
}
int LoadLink_L(LinkList &L){
华南农业大学数据结构实验1答案,仅供参考。
// 单链表遍历
LinkList p = L->next;
if(p==NULL)printf("The List is empty!"); // 请填空
else
{
while(p!=NULL) // 请填空
{
printf("%d ",p->data);
p=p->next; // 请填空
}
}
printf("\n");
return OK;
}
int LinkInsert_L(LinkList &L,int i,ElemType e){
LNode *p=L,*s;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1) return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;s->next=p->next;
p->next=s;
return OK;
}
int LinkDelete_L(LinkList &L,int i, ElemType &e){
LNode *p=L,*q;
int j=0;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j<i-1) return ERROR;
q=p->next;p->next=q->next;
e=q->data;
free(q);
return OK;
}
华南农业大学数据结构实验1答案,仅供参考。
void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc) {
LinkList pa,pb,pc;
pa=La->next;pb=Lb->next;
Lc=pc=La;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(Lb);
}
int main()
{
LinkList La,Lb,Lc;
int n;
scanf("%d",&n);
CreateLink_L(La,n);
printf("List A:");
LoadLink_L(La);
scanf("%d",&n);
CreateLink_L(Lb,n);
printf("List B:");
LoadLink_L(Lb);
MergeList_L(La,Lb,Lc);
printf("List C:");
LoadLink_L(Lc);
}
06线性链表逆置
华南农业大学数据结构实验1答案,仅供参考。
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define ElemType int
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
int CreateLink_L(LinkList &L,int n){
// 创建含有n个元素的单链表
LinkList p,q;
int i;
ElemType e;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL; // 先建立一个带头结点的单链表 q = (LinkList)malloc(sizeof(LNode));
q = L;
for (i=0; i<n; i++) {
scanf("%d", &e);
p = (LinkList)malloc(sizeof(LNode)); // 生成新结点
p->data=e;
p->next=q->next;
q->next=p;
q=q->next;
}
return OK;
}
int LoadLink_L(LinkList &L){
// 单链表遍历
LinkList p = L->next;
if(p==NULL)printf("The List is empty!"); // 请填空
else
{
while(p!=NULL) // 请填空
{
printf("%d ",p->data);
p=p->next; // 请填空
}
华南农业大学数据结构实验1答案,仅供参考。
printf("\n");
return OK;
}
int LinkInsert_L(LinkList &L,int i,ElemType e){ LNode *p=L,*s;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1) return ERROR;
s=(LinkList)malloc(sizeof(LNode)); s->data=e;s->next=p->next;
p->next=s;
return OK;
}
int LinkDelete_L(LinkList &L,int i, ElemType &e){ LNode *p=L,*q;
int j=0;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j<i-1) return ERROR; q=p->next;p->next=q->next;
e=q->data;
free(q);
return OK;
}
int main()
{
LinkList T;
int n,i,l;
ElemType x, e;
scanf("%d",&n);
CreateLink_L(T,n);
printf("The List is:");
LoadLink_L(T);
华南农业大学数据结构实验1答案,仅供参考。
} for(i=l;i>0;i--) { LinkDelete_L(T,n+1-i,x); LinkDelete_L(T,i,e); LinkInsert_L(T,i,x); LinkInsert_L(T,n+1-i,e); } printf("The turned List is:"); LoadLink_L(T);
正在阅读:
华南农业大学数据结构答案(实验1)09-06
有始有终定能成功国旗下讲话11-07
关于大学生兼职情况的调查与研究05-01
部编人教版一年级语文下册第21课《小壁虎借尾巴》教学设计10-13
中国控制线行业市场前景分析预测报告(目录) - 图文04-18
小学二年级上册多音字汇总(全的)08-14
竣工资料管理规定终版11-21
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 华南农业大学
- 数据结构
- 答案
- 实验
- 公需课《突发公共卫生事件应急处理技术方案》课后习题及答案
- 小学英语单词分类卡片打印版
- 【部编新教材】2019秋季学期统编版语文六年级(上)19 三黑和土地含答案-最新课时训练预习卡-最新课时训练
- AT89C2051单片机完成模数转换的新方法
- 经济学名词解释大全汇总
- 电信业务代办委托书模版
- 2016年内蒙古高考考生各分数段人数统计表
- 注塑成型工艺介绍
- 物业公司及各部门年度目标考核责任书(公司确定稿)
- 朱溪镇中心小学 控烟考评奖惩标准
- 项目资金使用计划表
- 中医体质辨识健康教育处方
- 关于腹腔及后腹膜淋巴结的超声图像分析、临床意义的讨论
- 2019年中国合成纤维行业市场深度调研及投资战略研究报告目录
- 工程质量承诺书
- 乡村少年宫信息技术教学计划
- 项目成本管理制度
- 民用爆炸物品防爆防盗抢事故应急预案
- 2017年重庆大学新闻学院634新闻传播史论之中国新闻事业史考研仿真模拟题
- (2) 2014.4.输血科三基考试试题答题