数据结构线性链表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这是单链表的创建,取元素,添加,删除和销毁等功能实例:#include

#include

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

typedef int Status;

typedef int ElemType;

typedef struct Lnode{

ElemType data;

struct Lnode *next;

}Lnode;

typedef Lnode *LinkList;

Status InitList(LinkList &L)

{ Lnode *p;

p=(Lnode *)malloc(sizeof(Lnode));

if(p==NULL) return ERROR;

L=p;

L->next=NULL;

return OK;

}

Status CreatList(LinkList &L)

{ int i,len;

ElemType x;

LinkList p,q;

printf("input list length:");

scanf("%d",&len);

printf("\ninput list data:\n");

i=0; q=L;

while(i

{ p=(Lnode *)malloc(sizeof(Lnode));

scanf("%d",&x);

p->data=x;

q->next=p;

q=p;

i++;

}

q->next=NULL;

return OK;

}

int ListLength(LinkList L)

{ int len=0;

LinkList p;

p=L->next;

while(p)

{ len++;

p=p->next;}

return (len);

}

Status GetList(LinkList L,int i,ElemType &e) { int j;

LinkList p;

if(i<1) return ERROR;

j=0;

p=L;

while(p->next!=NULL&&j

{ p=p->next;

j++;}

if(j==i) {e=p->data; return OK;}

return ERROR;

}

Status InsertList(LinkList &L,int i,ElemType e) { int j;

LinkList p,q;

if(i<1) return ERROR;

j=0;

p=L;

while(p->next!=NULL&&j

{ p=p->next;

j++;}

if(j==i-1)

{ q=(Lnode *)malloc(sizeof(Lnode));

q->data=e;

q->next=p->next;

p->next=q;

return OK;}

return ERROR;

}

Status DeleteList(LinkList &L,int i,ElemType &e) { int j;

LinkList p,q;

if(i<1) return ERROR;

j=0;

p=L;

while(p->next!=NULL&&j

{ p=p->next;

j++;}

if(p->next==NULL)

{ return ERROR;}

else

{ q=p->next;

p->next=q->next;

e=q->data;

free(q);

return OK;}

}

void PrintList(LinkList L)

{

LinkList p;

p=L->next;

printf("链表中的元素为:");

while(p){

printf("%4d",p->data);

p=p->next;

}

printf("\n");

}

void main()

{

ElemType i,e;

LinkList L;

InitList(L);

CreatList(L);

printf("输入要取元素的位置:");

scanf("%d",&i);

GetList(L,i,e);

printf("第%d个位置的元素是:%d\n",i,e); printf("输入要插入元素的位置及元素值:");

scanf("%d%d",&i,&e);

InsertList(L,i,e);

printf("已插入元素%d在第%d个位置!\n",e,i); PrintList(L);

printf("输入要删除的位置:");

scanf("%d",&i);

DeleteList(L,i,e);

printf("已删除第%d个元素的位置%d!\n",i,e); PrintList(L);

}

这是单链表中删除三个链表相同元素的实例:

#include

#include

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

typedef int Status;

typedef int ElemType;

typedef struct Lnode{

ElemType data;

struct Lnode *next;

}Lnode;

typedef Lnode* LinkList;

void creatList(LinkList &L,int length)

{

int i;

ElemType elem;

LinkList p,s;

L=(LinkList)malloc(sizeof(Lnode));

L->next=NULL;

p=L;

printf("请输入链表数据:");

for(i=0;i

scanf("%d",&elem);

s=(LinkList)malloc(sizeof(Lnode));

s->data=elem;

p->next=s;

p=s;

相关文档
最新文档