数据结构单链表、双链表的逆置算法

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

数据结构与算法

的课程设计

课程设计题目:数据结构的逆置算法

院系名称:信息技术学院

专业(班级):计算机2班

姓名:

学号:

指导教师:

实验内容:分别用一维数组,单链表,双链表实现逆置

(一)使用一维数组实现逆置

1.需求分析:定义一个一维数组(整型),用for语句实现循环,给数组元素赋值,并将

数组元素逆序输出。

2.详细设计:

main()

{ int a[3],i; /*定义元素个数为3的一维数组*/

for(i=0;i<3;i++)

scanf("%d",&a[i]);

for(i=2;i>=0;i--)

printf("%d ",a[i]);

getch();

}

3.运行及调试:

4.附录:

#include

void main()

{ int a[3],i; /*定义一维数组*/

for(i=0;i<3;i++)

scanf("%d",&a[i]);

for(i=2;i>=0;i--)

printf("%d ",a[i]);

getch();

}

(二)单链表实现逆置

1.需求分析:创建一个单链表并实现逆序输出

2.详细设计:定义的所有数据类型,对每个操作写出伪码算法;对主程序和其他模块也都写出伪码算法。

(1)单链表的定义

typedef struct node

{ int data;/*数据域为整型*/

struct node* next; /*定义结点的指针域*/

}LinkList;/*数据结点*/

(2)头插法建立单链表

Tnode *CreatList()

{ Tnode *head; /*头指针*/

LinkList *p;/*工作指针/

int ip;

head=(Tnode *)malloc(sizeof(Tnode));

head->next=NULL;/*链表开始为空*/

printf("please input the number:\n");

scanf("%d",&ip); /*向链表中添加元素*/

while(ip!=000)

{ p=(LinkList *)malloc(sizeof(LinkList));/*生成新结点*/ p->data=ip; /*将值赋给新生结点*/

p->next=head->next;

head->next=p;

scanf("%d",&ip);

}

if(ip==000) /*当输入的数值为000时结束*/

printf("\nthe ip is end!\n\n");

return head;

}

(3)读取链表中的数据

void ReadList(Tnode *head)

{ LinkList *p;

p=head->next;

while(p)

{ printf("%d ",p->data);

p=p->next;

}

printf("\n");

}

(4)链表的倒置

void ExchangeList(Tnode *head)

{ LinkList *r,*s;

r=head->next;

head->next=NULL;

while(r)

{ s=r->next;

r->next=head->next;

head->next=r;

r=s;

}

3.运行及调试

5.附录:

/*带头结点的链表建立*/

#include

#include

#include

typedef struct node /*结点类型定义*/

{ int data; /*结点的数据域*/

struct node* next; /*结点的指针域*/

}LinkList;/*数据结点*/

typedef struct

{ int length; /**链表的长度/

struct node*next; /*结点的指针域*/

}Tnode; /*头结点*/

Tnode *CreatList()/*头插法建立单链表*/

{ Tnode *head;

LinkList *p;/*工作指针*/

int ip;

head=(Tnode *)malloc(sizeof(Tnode));

head->next=NULL; /*链表开始为空*/

printf("please ip the number:\n");

scanf("%d",&ip);

while(ip!=000)

{ p=(LinkList *)malloc(sizeof(LinkList)); /*生成新结点*/ p->data=ip; /*将元素值赋给新生结点p*/

p->next=head->next;

head->next=p; /*head指向p结点*/

scanf("%d",&ip);

相关文档
最新文档