五、实验总结和思考:(填写收获和体会,分析成功或失败的原因)
收获:凡事只要经过了自己的实践,才能发现问题,后才能想办法去解决它,才能有新的收获和启发,并获取更多的知识。同时,只有多写代码才能熟悉它们,在不断的练习中去获取经验,以后遇到相关或是类似的问题才知道该怎样做或是怎样处理!
问题:容易犯格式等细节上的错误,并且调试时自己不易发现。所以,写代码是应注意细节,避免不该犯的错误
附件:(源代码)
/*
本程序实现以下功能:
1.从键盘输入一组整数,建立带头结点的非递增有序单向链表La;
2.从键盘输入一组整数,建立带头结点的非递增有序单向链表Lb;
3.建一有序链表L,将归并后的数据放于此链表中;
*/
#include "conio.h"
#include "alloc.h"
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ENDFLAG 0
typedef int ElemType;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
void InitList(SqList *L)
{
L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem)
{
printf("\n\tOut of space.");
getch();
exit(-2);
}
L->length=0;
L->listsize=LIST_INIT_SIZE;
}
void Merge (SqList La,SqList Lb,SqList *Lc)
{
ElemType *pa,*pb,*pc,*pa_last,*pb_last;
pa=La.elem;
pb=Lb.elem;
Lc->listsize=Lc->length=La.length+Lb.length;
pc=Lc->elem=(ElemType *)malloc(Lc->length*sizeof(ElemType));
if(!Lc->elem)
{
printf("\n\nOut of space.\n");
getch();
exit(-2);
}
pa_last=La.elem+La.length-1;
pb_last=Lb.elem+Lb.length-1;
while(pa<=pa_last&&pb<=pb_last)
{
if(*pa<=*pb) *pc++=*pa++;
else *pc++=*pb++;
}
while(pa<=pa_last) *pc++=*pa++;
while(pb<=pb_last) *pc++=*pb++;
}
void shuru(SqList *L)
{
ElemType x,*newbase;
scanf("%d",&x);
while(x!=ENDFLAG)
{
if(L->length>=L->listsize) /* full */
{
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
{
printf("\n\tOut of space.");
getch();
exit();
}
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
L->elem[L->length++]=x;
scanf("%d",&x);
}
}
void main()
{
SqList La,Lb,Lc;
ElemType x;
clrscr();
InitList(&La);
InitList(&Lb);
printf("\n\t\tInput the data of the list La:\n\n\t");
shuru(&La);
printf("\n\t\tInput the data of the list Lb:\n\n\t");
shuru(&Lb);
MergeList(La,Lb,&Lc);
printf("\n\t\tThe result is as the follows:\n\n\t");
for(x=0;x<Lc.length;x++)
printf("%d ",Lc.elem[x]);
getch();
}
第二篇:线性表实验报告
西安郵電學院
数据结构实验报告
题 目: 线性表的运用
一.实验目的:
熟悉线性表的创建,插入,删除,查找和显示的操作
二.实验内容:
1.题目:使用C语言程序实现线性表的创建,插入,删除,查找和显示的功能
2.代码和结果:
#include<stdio.h>
#include<malloc.h>
#define MaxSize 50
#define OK 1
#define ERROR 0
typedef char ElemType;
typedef struct
{
ElemType elem[MaxSize];
int length;
}SqList; /*顺序表类型定义*/
void InitList(SqList * &L) /*初始化顺序表L*/
{
L=(SqList * )malloc(sizeof(SqList));
L->length=0;
}
int CreateList(SqList * L,int n) /*录入初数据*/
{
int i;
printf("输入%d个整数:\n",n);
for(i=0;i<n;i++)
scanf("\n%d",&L->elem[i]);
return OK;
}
void DestroyList(SqList * L) /*释放顺序表L*/
{
free(L);
}
int ListEmpty(SqList * L) /*判断顺序表L是否为空表*/
{
return(L->length==0);
}
int ListLength(SqList * L) /*返回顺序表L的元素个数*/
{
return(L->length);
}
void DispList(SqList * L) /*输出顺序表*/
{
int i;
if(ListEmpty(L))return;
for(i=0;i<L->length;i++)
printf("%d",L->elem[i]);
printf("\n");
}
int GetElem(SqList * L,int i,ElemType &e) /*获取顺序表L中第i个元素*/
{
if(i<1||i>L->length)
return ERROR;
else
e=L->elem[i-1];
return e;
}
int LocateElem(SqList * L,ElemType e) /*在顺序表L中查找元素e*/
{
int i=0;
while(i<L->length && L->elem[i]!=e) i++;
if(i>=L->length)
return ERROR;
else
return i+1;
}
int ListInsert(SqList * &L,int i,ElemType e) /*在顺序表L中第i个位置插入元素e*/
{
int j;
if(i<1||i>L->length+1)
return 0;
i--;
for(j=L->length;j>i;j--)
L->elem[j]=L->elem[j-1];
L->elem[i]=e;
L->length++;
return OK;
}
int ListDelete(SqList * &L,int i,ElemType &e) /*顺序表L中删除第i个元素*/
{
int j;
if(i<1||i>L->length)
return 0;
i--;
e=L->elem[i];
for(j=i;j<L->length-1;j++)
L->elem[j]=L->elem[j+1];
L->length--;
return OK;
}
void main()
{
SqList *L;
ElemType e;
printf("(1)初始化顺序表L\n");
InitList(L);
int n;
printf("(2)请输入要录入的元素个数:");
scanf("%d",&n);
L->length=n;
CreateList(L,n);
printf("(3)输出顺序表:");
DispList(L);
printf("(4)请输入要查找第几号元素:");
int a;
scanf("%d",&a);
printf("您所查找的元素为%d\n",GetElem(L,a,e));
printf("(5)请输入要查找的元素:");
scanf("%d",&e);
printf("您所查找的元素在%d号位置\n",LocateElem(L,e));
printf("(6)请输入要插入的位置和元素:\n");
int c,d;
scanf("%d%d",&c,&d);
ListInsert(L,c,d);
printf("(7)输出顺序表L:");
DispList(L);
printf("(8)请输入要删除L的第几号元素:\n");
int f;
scanf("%d",&f);
ListDelete(L,f,e);
printf("(9)输出顺序表L:");
DispList(L);
printf("(10)释放顺序表L\n");
DestroyList(L);
}
3.心得体会
在设计一个多功能程序的时候,可以考虑设计多个函数来分担主函数的压力,并且可以方便主函数的功能强化和使用,有利于日后对于程序的修改.