当前位置:文档之家› 《数据结构》上机实验一资料

《数据结构》上机实验一资料

青岛理工大学数据结构课程实验报告课程名称数据结构班级软件131 实验日期 4.15姓名学号实验成绩实验名称线性表的顺序表示与链式表示实验目的及要求实验目的1.加深理解线性表的顺序表示与链式表示的意义和区别,掌握用它们表示时各基本操作的设计与实现。

2.学会定义线性表的顺序存储类型和链式存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。

3.掌握线性表的基本操作(初始化、建立、插入、删除、遍历等)。

4.掌握对多函数程序的输入、编辑、调试和运行过程。

5.进一步熟练C语言的使用,特别是指针和链表的使用。

能在实际应用背景下恰当选择顺序存储和链式存储。

实验要求1.预习C语言中的结构的定义和基本操作方法2.对线性表的每个基本操作用单独的函数实现3.编写完整程序完成下面的实验内容并上机运行4.整理并上交实验报告实验环境硬件平台:普通的PC机软件平台:Windows 2003操作系统编程环境:VisualC++实验内容1.分别建立包含10个数据元素的顺序线性表和链式线性表;2.从键盘输入一个数据元素和插入位置k,将元素插入到线性表中第k(包含0号位置)个位置;3.从键盘输入一个数据元素关键字或位置k(包含1号位置),从线性表中删除相应数据元素;4.能完成查找功能;5.给出程序及插入、删除前和插入、删除后线性表结果。

//创建顺式线性表struct number *creat(void){struct number *head,*p1;p1=head=(struct number*)malloc( SIZE * sizeof(struct number));scanf("%ld",&p1->num);for(;p1->num!=0;L++){算法描述及实验步骤p1++;scanf("%ld",&p1->num);}return(head);}//输出顺式线性表中的元素void print(struct number*head){struct number *p;int s=L;p=head;if(p!=0){printf("\n您输入的数据为:\n");for(;s>0;p++,s--)printf("%ld ",p->num);}}//查找顺式线性表中的元素void search(struct number *head){struct number *p;long num1;int n=0,s=0;p=head;printf("\n请输入您要查找的数据:\n");scanf("%ld",& num1);if(head!=0)for(;p->num!=0;p++){n++;if(p->num==num1){s=1;break;}}if(s==0)printf("\n没有您所要查找的数据\n");elseprintf("\n找到您所需数据'%ld'在表中第%d个\n",num1,n); }//插入顺式线性表的元素struct number *insert(struct number*head){struct number *p1,*p2;int n=1;long num1;p1=p2=head;p2=p2+L-1;printf("\n请输入您要插入的数据:\n");scanf("%ld",&num1);if(num1<p2->num){for(p1=head;p1->num<num1;p1++)n++;for(;p2>=p1;p2--)(p2+1)->num=p2->num;}(p2+1)->num=num1;L++;return(head);}//删除顺式线性表的元素struct number *del(struct number*head){struct number *p1,*p2;long num1;int n=1;p1=p2=head;printf("\n请输入要删除的数据:\n");scanf("%ld",&num1);p2=p2+L-1;for(;p1->num!=num1 && n<=L;p1++) n=n+1;if(n>L){printf("\n没有您要删除的数据\n");return(0);}else{for(;p1<=p2;p1++)p1->num=(p1+1)->num;L--;return(head);}}struct list *creat_n()//创建有n个元素的链表{struct list *q,*p,*head=NULL;printf("\n输入你所要创建的结点数: ");scanf("%d",&length);head=p=(list*)malloc(sizeof(list)); //创建一个新结点并用头指针指向它printf("输入该结点的值: ");scanf("%d", &p->data);p->next=NULL;for(int i=length-1;i>=1;i--){q=p;p=(list*)malloc(sizeof(list)); //创建新结点printf("输入该结点的值: ");scanf("%d", &p->data);q->next=p;}printf("输入完毕\n\n");p->next=NULL;return head;}struct list * output()//输出表长与结点值函数{struct list *p;p=head;printf("\n当前链表中存有的元素:\n");while(p!=NULL){printf("%d\n",p->data);p=p->next;}printf("当前的表长是: %d\n\n",length);//输出当前表长return head;}void insert()//插入结点函数{struct list *k,*p,*q;int x;printf("请输入你要在哪个结点值之前插入新结点: ");scanf("%d",&x);k=(list*)malloc(sizeof(list));//创建新结点printf("请输入新结点的值: ");scanf("%d",&k->data);k->next=NULL;if(head==NULL)//若链表为空,则直接入链表{head=k;length=length+1;printf("插入成功\n\n");}else if(head->data==x)//在第一个结点前插入新结点{k->next=head;head=k;printf("插入成功\n\n");length=length+1;}else{q=head;p=head->next;while((p != NULL) && (p->data != x))//找出值为X的结点的位置{q = p;p = p->next;}if (p == NULL){q->next=k;//在链表末插入新结点printf("插入成功\n");length=length+1;}else if(p->data == x)//在要求的X结点前插入新结点{k->next=p;q->next=k;printf("插入成功\n\n");length=length+1;}}output();}int delet()//删除结点函数{struct list *q,*p;int x,y;printf("请输入你所要删除的结点值: ");scanf("%d",&x);if(head==NULL)//表空{printf("表空\n");return 0 ;}else if(x==head->data)//第一个结点为删除的结点{q=head;head=head->next;y=q->data;free(q);printf("删除成功\n\n");length=length-1;output();return(y);}else{q=head;p=head->next;while((p != NULL) && (p->data != x))//找出值为X的结点{q=p;p=p->next;}if(p==NULL)printf("没有删除对象\n");}if(x==p->data)//删除值为X的结点{q->next=p->next;y=p->data;free(p);printf("删除成功\n\n");length=length-1;output();return (y);}else{printf("表中没有指定的结点\n");output();return 0;}}return 0;}void find(){struct list *p;int k,x,i=1;char y,n;LOOP:p=head;printf("请输入你要查找的结点值: ");scanf("%d",&x);while(p->data!=x){p=p->next;i++;}printf("你所查找的结点是表中第%d 个结点!\n\n",i);printf("是否要继续查找,请输入y/n\n\n");k=getch();if(k=='y'){i=1;goto LOOP;}elsereturn;}调试过程及实验结果程序运行过程中输入了顺序表,结果输出结果符合情况,程序成功。

相关主题