电子科大软基第二次上机实验报告(7700字)

来源:m.ttfanwen.com时间:2016.9.25

软基第二次上机实验报告

EX2.1

一、程序流程说明

1)首先创建一个单链表:从键盘读入五个整数,按输入顺序形成单链表。将创建好的链表元素依次输出到屏幕上。

2)在已创建好的链表中插入一个元素:从键盘读入元素值和插入位置,调用插入函数完成插入操作。然后将链表元素依次输出到屏幕上。

3)在已创建好的链表中删除一个元素:从键盘读入欲删除的元素位置(序号),调用删除函数完成删除操作。然后将链表元素依次输出到屏幕上。

二、程序代码

#include<stdio.h>

#include<malloc.h>

/*定义链点*/

typedef struct node_type

{

int data;

struct node_type *next;

}node_type;

/*定义链表*/

typedef struct list_type

{

node_type *head;

node_type *tail;

int length;

}list_type;

int read()

{

int x;

scanf("%d",&x);

return x;

}

void error(int x)

{

switch(x)

{

case 1:

printf("\nthe place of the data is wrong ,please input the place again\n"); break;

}

}

/*创建链表*/

void createlist(list_type *lb)

{

1 / 12

node_type *p,*s;

int x;

lb->head=(node_type*)malloc(sizeof(node_type)); lb->length=0;

p=lb->head;

while(lb->length<5) //输入五个数 {

scanf("%d",&x);

s=(node_type*)malloc(sizeof(node_type));

s->data=x;

p->next=s;

p=s;

lb->length++;

}

p->next=NULL;

lb->tail=p;

}

/*显示元素*/

void showlist(list_type *lb)

{

node_type *p;

p=lb->head->next;

printf("\nThe linked list is\n\n");

while(p!=NULL)

{

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

p=p->next;

}

printf("\nThe length of this linked list is %d\n",lb->length); }

/*插入*/

void insertlist(list_type *lb,int new_data,int place) {

node_type *new_node,*p;

int i=0;

new_node=(node_type*)malloc(sizeof(node_type)); new_node->data=new_data;

p=lb->head;

while(lb->length+1<place||place<1)

{

error(1);

place=read();

}

while(i<place-1)

2 / 12

{

p=p->next;

i++;

}

new_node->next=p->next;

p->next=new_node;

if(new_node->next==NULL)

{

lb->tail=new_node;

}

lb->length++;

} //插入链点

/*删除*/

void deletelist(list_type *lb,int place) {

int i=0;

node_type *p,*g;

p=lb->head;

while(place>lb->length||place<1) {

error(1);

place=read();

}

while(i<place-1)

{

p=p->next;

i++;

}

g=p->next;

p->next=p->next->next; //删除链点 free(g);

if(p->next==NULL)

{

lb->tail=p;

}

lb->length--;

}

/*主函数*/

void main()

{

list_type lb;

int new_data,place;

int del_place;

printf("please input the the list\n");

3 / 12

createlist(&lb);

showlist(&lb);

printf("\nplease input the new data\n");

new_data=read();

printf("please input the place of the new data where it should be\n"); place=read();

insertlist(&lb,new_data,place);

showlist(&lb);

printf("\nplease input the place of the number which will be deleted\n"); del_place=read();

deletelist(&lb,del_place);

showlist(&lb);

}

三、测试数据

输入:1 2 3 4 5

输出:1 2 3 4 5

插入位置与元素:2,5

输出:1 5 2 3 4 5

删除位置:3

输出:1 5 3 4 5

四、上机时遇到的问题

输入的头结点之类的不对,但后来及时改正

五、实际运行结果

电子科大软基第二次上机实验报告

4 / 12

六、小结体会

EX2.2

一、程序流程说明

1)创建一个单链表,其数据元素为整数,从键盘输入,输入0结束(注意0不放到链表内);

2)从键盘任意输入一个整数,在单链表中查询该数,如果单链表中已经存在这个数,就调用删除函数,删除该元素所在结点,并将单链表在删除前后的数据元素依次输出到屏幕上;如果单链表中不存在这个数,就调用插入函数,将这个数插入到单链表尾,并将单链表在插入前后的数据元素依次输出到屏幕上。

二、程序代码

#include <stdio.h>

#include <malloc.h>

typedef struct node_type

{

int data;

struct node_type *next;

}node_type;

/*定义链表*/

typedef struct list_type

{

node_type *head;

node_type *tail;

int length;

}list_type;

int read()

{

int x;

scanf("%d",&x);

return x;

}

void error(int x)

{

switch(x)

{

case 1:

printf("\nthe place of the data is wrong ,please input the place again\n");

break;

}

}

void createlist(list_type*lb)

{

node_type *p,*s;

int x;

5 / 12

lb->head=(node_type*)malloc(sizeof(node_type)); lb->length=0;

p=lb->head;

while(1)

{

scanf("%d",&x);

s=(node_type*)malloc(sizeof(node_type));

if(x==0) break;

s->data=x;

p->next=s;

p=s;

lb->length++;

}

p->next=NULL;

lb->tail=p;

}

/*显示元素*/

void showlist(list_type *lb)

{

node_type *p;

p=lb->head->next;

printf("\nThe linked list is\n\n");

while(p!=NULL)

{

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

p=p->next;

}

printf("\nThe length of this linked list is %d\n",lb->length); }

/*插入链点*/

void insertlist(list_type *lb,int new_data,int place) {

node_type *new_node,*p;

int i=0;

new_node=(node_type*)malloc(sizeof(node_type)); new_node->data=new_data;

p=lb->head;

while(lb->length+1<place||place<1)

{

error(1);

place=read();

}

while(i<place-1)

{

6 / 12

p=p->next;

i++;

}

new_node->next=p->next; p->next=new_node;

if(new_node->next==NULL) {

lb->tail=new_node;

}

lb->length++;

}

/*删除链点*/

void deletelist(list_type *lb,int place) {

int i=0;

node_type *p,*g;

p=lb->head;

while(place>lb->length||place<1) {

error(1);

place=read();

}

while(i<place-1)

{

p=p->next;

i++;

}

g=p->next;

p->next=p->next->next; free(g);

if(p->next==NULL) {

lb->tail=p;

}

lb->length--;

}

/*寻找那个整数*/

void searchlist(list_type *lb,int number ) {

node_type *p;

int i=0;

int m;

m=lb->length;

p=lb->head;

7 / 12

while(p->next!=NULL)

{

while(p->next->data==number)

{

deletelist(lb,i+1);

if(p->next==NULL)

{

break;

}

}

if(p->next!=NULL)

{

p=p->next;

i++;

}

}

if(i==m)

{

insertlist(lb,number,m+1);

}

}

/*主函数*/

void main()

{

list_type lb;

int number;

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

createlist(&lb);

showlist(&lb);

printf("please input number which you need:\n"); number=read();

searchlist(&lb,number);

showlist(&lb);

}

三、测试数据

输入:1 2 3 4 5 0

输出:1 2 3 4 5

输入:3

输出:1 2 4 5

输入:6

输出:1 2 3 4 5 6

四、上机遇到的问题

在WORD 排版时丢失了一些数据,导致错误。

五、实际运行结果

8 / 12

六、小结体会

失之毫厘,差之千里

EX2.3

一、程序流程说明

链表存放在向量前elenum个分量重,且递增有序,现要将x插入链表的适当位置,以保持链表的有序性。

二、程序代码

include<stdio.h>

#include<malloc.h>

#define MAXNUM 20

/*定义链点*/

typedef struct node_type

{

int data;

struct node_type *next;

}node_type;

/*定义链表*/

typedef struct list_type

电子科大软基第二次上机实验报告

电子科大软基第二次上机实验报告

9 / 12

{

node_type *head;

node_type *tail;

int length;

}list_type;

int read()

{

int x;

scanf("%d",&x);

return x;

}

void error(int x)

{

switch(x)

{

case 1:

printf("\nthe place of the data is wrong ,please input the place again\n"); break;

}

}

/*创建链表*/

void createlist(list_type*lb)

{

node_type *p,*s;

int x;

lb->head=(node_type*)malloc(sizeof(node_type));

lb->length=0;

p=lb->head;

while(1)

{

scanf("%d",&x);

s=(node_type*)malloc(sizeof(node_type));

if(x==-1) break;

s->data=x;

p->next=s;

p=s;

lb->length++;

}

p->next=NULL;

lb->tail=p;

}

/*显示元素*/

void showlist(list_type *lb)

{

10 / 12

node_type *p;

p=lb->head->next;

printf("\nThe linked list is\n\n");

while(p!=NULL)

{

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

p=p->next;

}

printf("\nThe length of this linked list is %d\n",lb->length); }

/*插入*/

void insertlist(list_type *lb,int new_node)

{

node_type *p,*t;

int i;

t=(node_type*)malloc(sizeof(node_type));

t->data=new_node;

if(lb->head>t)

{

t->next=lb->head;

lb->head=t;

}

else

{

p=lb->head;

while(p!=NULL)

{

for(i=1;i<=lb->length;i++)

{

if(p->next->data>new_node) {

break;

}

p=p->next;

}

}

}

t->next=p->next;

p->next=t;

lb->length++;

}

11 / 12

/*主函数*/

void main()

{

list_type lb;

int new_node;

printf("please input the the list\n"); createlist(&lb);

showlist(&lb);

printf("\nplease input the new_node\n"); new_node=read();

insertlist(&lb,new_node);

showlist(&lb);

}

三、测试数据

输入:1 2 3 6 8 12 -1

插入:4

输出:1 2 3 4 6 8 12

四、上机遇到的问题

双等于与单等于的错误

五、实际运行结果

六、小结体会

注意顺序表与链表的区别。

学号:

选课号:

姓名:

电子科大软基第二次上机实验报告

12 / 12

更多类似范文
┣ 电装实训报告 7500字
┣ 电装实训报告 15500字
┣ 电装实训报告 6000字
┣ 电装参数表 300字
┣ 更多电子科大电装实习报告
┗ 搜索类似范文