数据结构单链表、双链表的逆置算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);