软基报告

  • 格式:doc
  • 大小:151.50 KB
  • 文档页数:20

软件技术基础上机实验报告实验一、顺序表的相关操作1、有序的一组整数,1-2-3-4-6-5-9-19设计顺序表并实现以下操作:A.初始化线性表;B.添加上述一组数;C.删除第四个数据元素;D.显示B,C操作后的结果。

实验代码:#include "stdio.h"#define MAXNUM 10#define true 1#define false 0typedef int elemtype; //节点数据类型具体化typedef struct list_type{ elemtype data[MAXNUM];int num;}listtype; //定义listtype为顺序表类型int deletel(listtype *l,int i);void main( ){ int i;listtype list; //定义顺序表类型的变量elemtype x;list.num=8; //顺序表表长赋值//输入顺序表中的各个元素值for (i=0;i<list.num;i++)scanf("%d",&list.data[i]);for(i=0;i<list.num;i++)printf("%d",list.data[i]);printf("\n");deletel(&list,3); //调用删除函数//输出删除以后的结果for(i=0;i<list.num;i++)printf("%d",list.data[i]);printf("\n");}int deletel(listtype *l,int i){int j;if(l->num<0){printf("list is empty");return(false);}if(i<0||i>l->num-1){printf("i is invalid value");return(false);}for(j=i;j<l->num-1;j++)l->data[j]=l->data[j+1];l->num--;return(true);}实验结果:2、设线性表存放在向量A[1..MAXNUM]的前elenum个分量中,且递增有序。

试写一算法,将x插入到线性表的适当位置上,以保持线性表的有序性。

实验代码:#include "stdio.h"#define MAXNUM 10#define elenum 5#define true 1#define false 0typedef int elemtype; //节点数据类型具体化typedef struct list_type{ elemtype data[MAXNUM+1];int num;}listtype; //定义listtype为顺序表类型int insertl(listtype *l,int i,elemtype x);void main( ){ int i;listtype list; //定义顺序表类型的变量elemtype x,y;list.num=elenum; //顺序表表长赋值//输入顺序表中的各个元素值for (i=0;i<list.num;i++)scanf("%d",&list.data[i]);//输入待插入元素的值,x必须与表中原有数据类型一致printf("please insert:");scanf("%d",&x);printf("\n");printf("insert location:");scanf("%d",&y);insertl(&list,y,x); //调用插入函数printf("\n");//输出插入以后的结果for(i=0;i<list.num;i++){printf("%d",list.data[i]);printf("\n");}}int insertl(listtype *l,int i,elemtype x){ int j;if (l->num>=MAXNUM){ printf("the list is full");return(false);}if((i<0)||(i>l->num)){ printf("i is invalid value");return(false);}for(j=l->num-1;j>=i;j--) l->data[j+1]=l->data[j];l->data[i]=x;l->num++;return(true);}实验结果:假设题目中MAXNUM=10 elenum=5 线性表原有数据为10 20 30 40 50 现在第一个数后插入x=12 结果如下:3、图书资料管理问题,设一本书有编号、书名、作者、价格等信息,如下表设计顺序表并实现以下操作;A、初始化线性表;B 、添加表1中的记录;C 、删除第三条记录。

实验代码:#include <stdio.h> #define MAXNUM 10typedef struct book //图书馆资料数据 { long int number; char name[50]; char author[20]; float price; }bookinfo;typedef struct list //顺序表点 { bookinfo data[MAXNUM]; int num; } listtype;void main() { void init(listtype *l);void delete(listtype *l,int n); listtype list; bookinfo x;23.00zhaodelphi418.00 wang C 3 20.00 li VB 215.00 zhang Basic 1价格作者 书名 编号int i,m;init(&list); //初始化list.num=4;for (i=0;i<list.num;i++){scanf("%ld %s %s %f",&list.data[i].number,list.data[i].name,list.data[i].author,&list.data[i].price);//输入}delete(&list,3); //处理for(i=0;i<list.num;i++)printf("%ld %s %s %f\n",list.data[i].number,list.data[i].name,list.data[i].author,list.data[i].price);}void init(listtype *l){l->num=0;}void delete(listtype *l,int n){ int i;if(n<1||n>l->num){ printf(" n is invalid!");return; }for(i=n;i<l->num;i++) l->data[i-1]=l->data[i];l->num--;}实验结果:实验二、单链表的相关操作1、现有有序的一组整数的集合:1-2-2-3-4-6-6。

设计单链表,分别编写函数实现以下操作:A.初始化链表。

B.添加上述一组数(结点),生成该链表。

C.统计该链表的长度。

D.在表中查找数据为3和7的结点,并返回其位置(若找不到返回 -1)。

E.删除中间重复结点,使链表变为 1-2-3-4-6。

F.显示经B,E操作后,链表的状况。

实验代码:#include<stdio.h>#include<malloc.h>typedef struct snode{int data;struct snode *next;}node; //定义链表节点数据类型void initiatesl(node **s);void createsl(node *h);int find(node *h,int x);void print(node *h);int len(node *h);void delete(node *h);void main(){node *h,*p;int l,i,x,k;node t;h=&t;initiatesl(&h);createsl(h);print(h);l=len(h);printf("\nlengh:%d",l);k=find(h,3);printf("\nFind 3: %d",k);k=find(h,7);printf("\nFind 7: %d",k);delete(h);print(h);printf("\n");}void initiatesl(node **s){*s=(node*)malloc(sizeof(node));(*s)->next=NULL;}void createsl(node *h){ node *p , *s; int x;scanf("%d",&x);while(x!=-1){ s=(node*)malloc(sizeof(node));s->data=x;if(h->next==NULL) h->next=s;else p->next=s;p=s;scanf("%d",&x); }p->next=NULL;}int find(node *h,int x){node *p;int i=0;p=h;while(p->next!=NULL&&x!=p->data){p=p->next;i++; }if(p->data==x) return(i);else return(-1);}void print(node *h){node *p;printf("\n");for(p=h->next;p!=NULL;p=p->next)printf("%d ",p->data);}int len(node *h){node *p;int n=0;p=h;while(p->next!=NULL){p=p->next;n++;}return(n);}void delete(node *h){node *p,*s,*t;p=h->next;if(p!=NULL){s=p->next;while(s!=NULL){if(p->data!=s->data){p=s;s=s->next;}else{t=s;p->next=s->next;s=s->next;free(t);}}}}实验结果:实验三、查找与排序的相关操作1、设有序序列中数据元素的关键字分别是3、10、13、17、40、43、50、70.要求查找的关键字k为43的元素(成功)和关键字为5的元素(不成功)。