线性表的链接存储结构定义和基本操作算法实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档