数据结构实验1报告

  • 格式:doc
  • 大小:134.00 KB
  • 文档页数:7

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

任课教师:孙树森

《数据结构与算法》

(2012-2013学年第2学期)

学号:2011329700214

姓名:周咪咪

班级:11数媒2班

实验1:链表的建立与操作

一、实验目的:

掌握链表数据结构的建立及操作;

二、实验重点:

利用链表的原空间进行链表的反转;

三、实验内容:

设计一个将输入数据建立成链表、并依次输出链表数据、利用原空间把链表反转的程序。

四、实验步骤:

1.掌握链表的数据结构;

2.建立空链表;

3.用头插法向链表插入数据,实验数据:

验证数据:20,20,17,16,15,15,11,10,8,7,7,5,4;

4.依次输出链表中的数据;

5.利用链表原空间进行对链表进行反转;

6.依次输出反转后的链表数据,以判断反转操作的正确性,注意反转后,链表的第一个和最后一个元素是否正确;

实验提示:实验1链表。PPT;

7,进阶要求:完成P40 3.6.1的功能;

五、程序源码:

方法1:依次反转

#include

#include

typedef struct Node{ //定义单链表结构,Node为结点名

int data;

struct Node *next;

}Node,*linklist;

//头插法,输入顺序为反

void Input(linklist *L,int n)

{

linklist p;

int i;

*L=(linklist)malloc(sizeof(Node)); (*L)->next=NULL;

for(i=0;i

{

p=(linklist)malloc(sizeof(Node)); scanf("%d",&p->data);

p->next=(*L)->next;

(*L)->next=p;

}

}

//在屏幕上输出链表

void Output(Node *L,int n)

{ int i;

for(i=0;i

{

L=L->next;

printf("%d->",L->data);

}

L=L->next;

printf("%d",L->data);

printf("\n");

}

void reverse(linklist L,int n)

{

linklist p,r;

p=L->next;

int i;

for(i=1;i<=n;i++)

{

r=p->next;

p->next=L->next;

L->next=p;

p=r;

}

}

void main()

{

int n;

Node *L;

printf("输入元素个数:");

scanf("%d",&n);

Input(&L,n);

reverse(L,n);

printf("链表原顺序为:\n"); Output(L,n);

reverse(L,n);

printf("链表逆置后的顺序为:\n");

Output(L,n);

system("pause");

}

方法2:指针反向

#include

#include

typedef struct Node{ //定义单链表结构,Node为结点名 int data;

struct Node *next;

}Node,*linklist;

//头插法,输入顺序为反

void Input(linklist *L,int n)

{

linklist p;

int i;

*L=(linklist)malloc(sizeof(Node));

(*L)->next=NULL;

for(i=0;i

{

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

scanf("%d",&p->data);

p->next=(*L)->next;

(*L)->next=p;

}

}

//在屏幕上输出链表

void Output(Node *L,int n)

{ int i;

for(i=0;i

L=L->next;

printf("%d->",L->data);

}

L=L->next;

printf("%d",L->data);

printf("\n");

}

void reverse(linklist L,int n) {

linklist p,q,r,k;

int i,j,m;

k=L->next;

r=k;//暂存

for(i=1;i

k=k->next;//k指针后移至最后

}

L->next=k;

j=n-1;

for(i=1;i

q=r;

for(m=1;m

{q=q->next;}

p=q->next;

p->next=q;

j--;

}

q=r;

p=q->next;

p->next=q;