线性表的基本操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一:线性表的基本操作
1.实验目的:
1)掌握用VC++上机调试线性表的基本方法;
2)掌握线性表的基本操作,插入、删除、查找,以及线性表合并等运算在顺序存储结构和链接存储结构上的运算。
2.实验内容:
1)线性表建立、插入、删除操作实现;
2)已知有序表SA,SB,其元素均为递增有序,将此两表归并成一个新有序表SC,且SC中的元素仍然递增有序。
#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
typedefstruct Node
{
int data;
struct Node *next;
}Node,*LinkList;
void InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
}
void CreateFromTail(LinkList L)
{
Node *r,*s;
int flag=1;
int c;
r=L;
printf("尾插法建立单链表,输入-1结束\n");
while(flag)
{
scanf("%d",&c);
if(c!=-1)
{
s=(Node*)malloc(sizeof(Node));
s->data=c;
r->next=s;
r=s;
}
else
{
flag=0;
r->next=NULL;
}
}
}
void printL(LinkList L)
{
Node *p;
p=L;
while(p->next!=NULL)
{
printf("%d ",p->next->data);
p=p->next;
}
printf("\n");
}
int InsertList(LinkList L,int i,int e)
{
Node *pre,*s;
int k;
if(i<1)
{
return ERROR;
}
pre=L;
k=0;
while(pre!=NULL&& k<i-1)
{
pre=pre->next;
k=k+1;
}
if(!pre)
{
printf("插入位置不合理\n");
return ERROR;
}
s=(Node*)malloc(sizeof(Node));
s->data=e;
s->next=pre->next;
pre->next=s;
return OK;
}
int DelList(LinkList L,int i,int *e)
{
Node *pre,*r;
int k;
pre=L;
k=0;
while(pre->next!=NULL&& k<i-1)
{
pre=pre->next;
k=k+1;
}
if(!(pre->next))
{
printf("删除节点的位置不合理\n");
return ERROR;
}
r=pre->next;
pre->next=pre->next->next;
*e=r->data;
free(r);
return OK;
}
LinkList Merge_sort(LinkList La, LinkList Lb) {
LinkList pa, pb, pc, Lc;
Lc = (LinkList)malloc(sizeof(Node));
Lc->data = La->data + Lb->data;
pa = La->next;
pb = Lb->next;
Lc = pc = La;
while (pa&&pb){
if (pa->data<pb->data){
pc->next = pa;
pc = pa;
pa = pa->next;
}
else{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa ? pa :pb;
free(Lb);
return Lc;
}
int main()
{
LinkList L;
Node *p;
int length;
int t;
int e;
LinkList LA;
LinkList LB;
LinkList LC;
InitList(&L);
CreateFromTail(L);
printf("链表L为:");
printL(L);
t=InsertList(L,3,20);
printf("插入元素后链表为:");
printL(L);
t=DelList(L,4,&e);
printf("所删除元素e= %d\n", e);
printf("删除元素后链表为:");
printL(L);
//=====================
InitList(&LA);
InitList(&LB);
CreateFromTail(LA);
printf("链表LA为:");
printL(LA);
CreateFromTail(LB);
printf("链表LB为:");
printL(LB);
LC = Merge_sort(LA, LB);
printf("合并与排序后链表为:");
printL(LC);
return 0;
}
3.运行结果
4.实验总结。