线性表的链接存储结构定义和基本操作算法实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "stdio.h"
#include "stdlib.h"
#define MAX 10+1
typedef int datatype; /*定义数据类型*/
typedef struct node /*定义单链表存储类型*/
{datatype data; /*定义结点的数据域*/
struct node *next;} /*定义结点的指针域*/
lnode,*linklist; /*定义结点类型和指向结点的指针类型*/
typedef struct
{datatype data[MAX]; /*线性表的数据元素*/
int last; /*线性表的实际长度*/
}list; /*线性表的结构类型*/
/*******************1.creat************************/
lnode *creat(lnode *head,list *la) /*建立单链表,一个表头和一个线性表*/ {int i;
lnode *p;
head=malloc(sizeof(lnode));head->next=NULL; /*生成空表头*/
for(i=la->last;i>=1;i--) /*从表尾依次访问一维数组元素*/
{p=malloc(sizeof(lnode)); /*生成新结点*/
p->data=la->data[i]; /*结点数据域得到数组元素*/
p->next=head->next; /*结点地址域得到头结点地址域*/ head->next=p; /*头结点地址域得到结点的地址*/ }
return head;
}
/*******************2.insert************************/
linklist insert(linklist head,int i,datatype x)
{linklist p,s;int j=1;
p=head;
while(p && j
{j++;
p=p->next;}
if(p==NULL)
printf("The %dth element is not exist!\n",i-1);
else{s=malloc(sizeof(lnode));
s->data=x;
s->next=p->next;
p->next=s;}
return head;
}
/*******************3.locate***********************/
linklist locate(linklist head,datatype x)
{lnode *p=head->next;
while(p!=NULL && p->data!=x)
p=p->next;
return p;
}
/*******************4.delete************************/
void del(linklist head,int i)
{linklist p,q;int j=1;
p=head;
while(p && j
{j++;p=p->next;}
if(p->next==NULL)
printf("The %dth element is not exist!\n",i);
else{q=p->next;
p->next=q->next;
free(q);}
}
/**********************main************************/
main()
{
linklist hd,p;
list lst;
int i,x;i=0;
/*******************creat************************/
scanf("%d",&x);
while(x!=-1 && i<=MAX-1) /*输入10个以内的整数,以-1为结束标志*/
{i++;lst.data[i]=x;scanf("%d",&x);} /*将输入的整数存入线性表*/
st=i; /*线性表长度*/
hd=creat(hd,&lst); /*调用函数创建链接表,返回hd头指针*/ p=hd;
while(p->next!=NULL) /*输出链接接表各结点数据元素*/
{p=p->next;printf("%d ",p->data);}
printf("\n");
/*******************insert************************/
scanf("%d%d",&i,&x); /*输入插入结点位置i和数据x*/
hd=insert(hd,i,x); /*调用函数插入结点,返回hd头指针*/
p=hd;
while(p->next!=NULL)
{p=p->next;printf("%d ",p->data);}
printf("\n");
/*******************found************************/
scanf("%d",&x); /*输入查找数据x*/
p=locate(hd,x); /*调用函数查找x,返回结点指针*/
if(p!=NULL)
printf("%d\n",p->data);