华南农业大学数据结构答案(实验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);

本文来源:https://www.bwwdw.com/article/02ui.html

Top