桂电七院数据结构实验报告二

链表的基本操作

原代码的调试
这里我们要注意在DEVC++中直接复制粘贴代码,运行的时候会出现一大堆错误,经过检查可以发现这是因为有部分代码被放在了/* */的注释中,所以我们需要将它放出来,并且记得在调用函数的时候就声明变量的类型。而且DEVC++中本身对NULL就有定义,所以最上边的定义NULL语句可以删去。DEVC++中是对delete有定义的,所以我们在定义删除函数那里需要将其名称改一下,这里我为了方便起见直接改成了deleter。下面的void main()可以改为int main() {return 0}的形式,我为了方便直接删除了void没加return 0也是可运行的。调试后的代码和运行效果如下
#include “stdio.h”
#include “malloc.h” /包含动态分配内存函数/
#define TRUE 1
#define FALSE 0

typedef int elemtype;
typedef struct node { /链表结点类型定义/
elemtype data; /结点数据域/
struct node *next; /结点的指针域/
} linklist;

linklist *creatlist() { /创建链表函数-以按下任意建开始创建,以输入字符’?'表示结束标志/
char ch;
int x;
linklist *head,r,p;
p=(linklist
)malloc(sizeof(linklist));
head=p;
p->next=NULL;
r=p;
ch=getchar();
while(ch!=’?’) {
scanf("%d",&x);
p=(linklist
)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
r=r->next;
ch=getchar();
}
return (head);
}

int locate(linklist *head,elemtype k) { /定位检索函数-如链表中存在值为k的结点,则返回真,否则返回假/
linklist *s;
s=head->next;
while(s!=NULL)
if(s->data!=k)
s=s->next;
else
return TRUE;
return FALSE;
}

void insert(linklist *head,int i,elemtype x) { /在链表head的第i个位置插入 元素x/
linklist *s,*p;
int j;
p=head;
j=0;
while(p->next&&j<i-1) {
p=p->next;
j++;
}
if(!p||j>i-1) printf(“error!”);
s=(linklist *)malloc(sizeof(linklist));
if(!s) printf(“overflow!”);
s->data=x;
s->next=p->next;
p->next=s;
}

void deleter(linklist *head,int i) { /删除链表的第i个结点/
int j=0;
linklist *p,*s,*q;
p=head;
j=0;
while((p->next!=NULL)&&(j<i-1)) {
p=p->next;
j++;
}
if(p->next!=NULL) {
q=p->next;
p->next=p->next->next;
free(q);
} else printf(“illegal delete position,delete failed!”);
}

void print(linklist *head) { /打印出链表head中各个结点的值/
linklist *p;
p=head->next;
while(p!=NULL) {
printf("%d “,p->data);
p=p->next;
}
printf(”\n");
}

main() { /主函数/
linklist *head; /定义指向链表的指针head/
int x;
int i,j;
printf(“please input the initial node and start by any key(’?'execpt)end with ‘?’\n”);
head=creatlist();
printf(“we have created a linklist as follow:\n”);
print(head);
printf(“now start search,please input the search value:”);
scanf("%d",&x);
printf("\n");
if(locate(head,x)) printf(“exsist!\n”);
else
printf(“not exsist!\n”);
printf(“start insert operation,please input insert position:”);
scanf("%d",&i);
insert(head,i,x);
printf(“after insertion:\n”);
print(head);
printf(“now start delete operation,input the delete position please:”);
scanf("%d",&j);
deleter(head,j);
printf(“after deletion:\n”);
print(head);
}
在这里插入图片描述
输入的时候记得用英文?来结束

(1) 定义一个逆置函数diverse(L),把链表进行逆置。在主程序中调用该函数,分析操作结果。
在这里插入图片描述
不懂的同学可以从上图来分析出做法,本人字可能不太好认,可以私信问我
为了方便阅读,我删除了原来不需要的函数,源代码和运行效果如下:
#include “stdio.h”
#include “malloc.h” /包含动态分配内存函数/
#define TRUE 1
#define FALSE 0

typedef int elemtype;
typedef struct node { /链表结点类型定义/
elemtype data; /结点数据域/
struct node *next; /结点的指针域/
} linklist;

linklist *creatlist() { /创建链表函数-以按下任意建开始创建,以输入字符’?'表示结束标志/
char ch;
int x;
linklist *head,r,p;
p=(linklist
)malloc(sizeof(linklist));
head=p;
p->next=NULL;
r=p;
ch=getchar();
while(ch!=’?’) {
scanf("%d",&x);
p=(linklist
)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
r=r->next;
ch=getchar();
}
return (head);
}

linklist *inverse (linklist *head) {
linklist *r,*p;
p=head->next;
head->next=NULL;
while(p!=NULL) {
r=p;
p=p->next;
r->next=head->next;
head->next=r;
}
}

void print(linklist *head) { /打印出链表head中各个结点的值/
linklist *p;
p=head->next;
while(p!=NULL) {
printf("%d “,p->data);
p=p->next;
}
printf(”\n");
}

main() { /主函数/
linklist *head; /定义指向链表的指针head/
int x;
int i,j;
printf(“please input the initial node and start by any key(’?'execpt)end with ‘?’\n”);
head=creatlist();
printf(“we have created a linklist as follow:\n”);
print(head);
printf(“逆置后的单链表如下\n”);
inverse(head);
print(head);
}
这里有个小小的bug,输入链表的时候需要先在前面打个空格,不然会导致吞数字。
在这里插入图片描述

(2) 定义一个函数delsame(L),把链表中重复的元素删除掉,只保留一个。在主程序中调用该函数,分析操作结果
在这个题中,我们先分析需要几个指针:
需要一个指针s指向头指针后面,还需要一个指针p指向s指针后面来遍历整个链表,判断是否有相同元素;若有相同元素,则删除这个节点,若没有则继续遍历;在这次循环遍历完成之后,s指针再指向下一个地方,重复上述步骤,所以我们需要3个指针,设其为p,q,s,这时画个图分析一下即可写出。

源代码和运行效果如下:
#include “stdio.h”
#include “malloc.h” /包含动态分配内存函数/
#define TRUE 1
#define FALSE 0

typedef int elemtype;
typedef struct node { /链表结点类型定义/
elemtype data; /结点数据域/
struct node *next; /结点的指针域/
} linklist;

linklist *creatlist() { /创建链表函数-以按下任意建开始创建,以输入字符’?'表示结束标志/
char ch;
int x;
linklist *head,r,p;
p=(linklist
)malloc(sizeof(linklist));
head=p;
p->next=NULL;
r=p;
ch=getchar();
while(ch!=’?’) {
scanf("%d",&x);
p=(linklist
)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
r=r->next;
ch=getchar();
}
return (head);
}

void delsame(linklist *head) {
linklist *s,*p,*q;
s=head->next;
p=s->next;
q=s;
while(s!=NULL) {
p=s->next;
q=s;
while(p!=NULL) {
if(s->data==p->data) {
q->next=p->next;//q指向p处
free§;//释放p节点
p=(linklist *)malloc(sizeof(linklist));//重新生成p指针
p=q->next;//p指向此时q的下一个
} else {
q=p;
p=p->next;
}
}
s=s->next;//p完成一次遍历
}
}

void print(linklist *head) { /打印出链表head中各个结点的值/
linklist *p;
p=head->next;
while(p!=NULL) {
printf("%d “,p->data);
p=p->next;
}
printf(”\n");
}

main() { /主函数/
linklist *head; /定义指向链表的指针head/
int x;
int i,j;
printf(“please input the initial node and start by any key(’?'execpt)end with ‘?’\n”);
head=creatlist();
printf(“we have created a linklist as follow:\n”);
print(head);
printf(“删除相同元素后的单链表如下\n”);
delsame(head);
print(head);
}
在这里插入图片描述

以上就是数据结构实验报告二**

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 桂林电子科技大学创建FTP服务器是为了进行计算机网络实验。FTP(文件传输协议)是一种用于在网络上传输文件的协议,它能够实现简单、高效和可靠的文件传输。 在计算机网络实验中,FTP服务器的创建可以提供实验所需的数据文件、软件等资源,方便学生们进行实验操作和数据传输。通过搭建FTP服务器,学生们可以在实验室的计算机上通过FTP客户端登录服务器,实现文件的上传和下载。 此外,桂林电子科技大学创建FTP服务器还能够提供便捷的远程访问服务。学生们可以利用FTP客户端在校外通过互联网连接到FTP服务器,方便地获取实验所需的资料和软件。这样,不论是在校内还是校外,学生们都可以方便地进行实验和学习。 桂林电子科技大学创建FTP服务器的过程中,需要考虑服务器的安全性和稳定性。服务器应设置合理的访问权限和认证机制,确保只有授权的用户可以访问服务器并进行上传下载操作。此外,服务器应具备良好的稳定性和可靠性,以保证学生们在实验过程中不会因服务器故障而受到影响。 总而言之,桂林电子科技大学通过创建FTP服务器为计算机网络实验提供了便捷的文件传输和远程访问服务。这样的服务不仅方便了学生们的实验学习,也为他们提供了更广阔的学习空间和学习资源。 ### 回答2: 桂林电子科技大学创建FTP服务器是为了在计算机网络实验中提供一个安全、高效的文件传输和共享平台。 FTP(File Transfer Protocol)是一种用于在计算机网络上进行文件传输的标准协议。它通过建立客户端和服务器之间的连接,实现文件的上传、下载、删除以及目录的创建和修改等功能。创建FTP服务器可以提供快速、稳定的文件传输服务,方便学生和教师在实验中共享和交流相关实验数据、文档和代码等。 首先,创建FTP服务器可以提供安全的文件传输环境。通过设置账号和密码登录验证机制,只有经过授权的用户才能访问服务器中的文件。同时,可以使用SSL/TLS等加密协议确保数据传输的机密性和可靠性,避免数据被窃听和篡改。 其次,创建FTP服务器可以提高文件传输效率。FTP支持并行传输,即多个文件可以同时上传或下载,提高了传输速度。而且,FTP服务器支持断点续传功能,即在传输过程中断开连接后,可以从断点处继续传输,避免重新传输文件,节省时间和带宽资源。 此外,创建FTP服务器还可以方便地管理文件和目录。可以创建不同的用户账号和权限,实现对不同文件的访问控制。可以创建各种目录,便于组织、分类文件,使文件的查找和管理更加方便。 总而言之,桂林电子科技大学创建FTP服务器是为了提供一个安全、高效的文件传输和共享平台,方便实验中的学生和教师进行数据交流和文件管理。同时,通过FTP服务器的创建和使用,使得计算机网络实验的进行更加便捷和高效。 ### 回答3: 桂林电子科技大学创建ftp服务器是为了进行计算机网络实验。FTP服务器(File Transfer Protocol)是一种用于在计算机网络上进行文件传输的协议,通过FTP服务器,用户可以通过网络传输文件,实现文件的上传和下载。 在计算机网络实验中,创建FTP服务器具有以下作用和意义: 1. 文件传输:FTP服务器可以提供一个可靠的文件传输平台,使实验室的师生可以通过网络传输实验数据和文件,方便实验结果的收集和保存。 2. 实验数据共享:通过FTP服务器,实验室的师生可以共享实验数据和文件,方便教师和学生之间的交流和合作。教师可以将教学资料和实验指导文件上传到FTP服务器供学生下载,学生也可以将实验报告和数据上传到服务器与教师及其他同学分享。 3. 远程访问:创建FTP服务器使得实验室的师生能够通过网络远程访问服务器上的文件,无需亲自前往实验室进行操作。这对于一些需要频繁访问实验数据的实验室师生来说十分便利。 4. 数据备份与恢复:FTP服务器可以作为实验室数据的备份平台,及时备份实验数据和文件,保证数据的安全性和完整性。当实验室发生数据丢失或损坏时,可以通过FTP服务器上的备份文件进行数据恢复。 总之,桂林电子科技大学创建FTP服务器为实验室的师生提供了一个高效、便捷和安全的文件传输平台,在计算机网络实验中起到了重要的作用。通过FTP服务器的应用,实验室师生能够更好地进行实验数据的管理、共享和备份,提高了实验教学的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值