您的位置:首页 > 其它

关于线性表的链式存储(链表)的创建,头插法,尾插法,删除链表结点的操作

2014-03-12 23:00 344 查看
本程序在VC环境下运行。

linklist.h文件。

#include<stdio.h>

#include<stdlib.h>

typedef int ElemType;

#define True 1

#define False 0

typedef struct Node{

ElemType data;

struct Node *next;

}Node,*linklist;

linklist.cpp文件。

#include "linklist.h"

//链表的初始化(含头结点)

int Initlinklist(linklist *L){

(*L)=(linklist)malloc(sizeof(Node));

if((*L)->next!=NULL){

(*L)->next=NULL;

return False;

}else{

return True;

}

}

//向链表中插入元素(头插法)

int inslinklist(linklist *L,int data){

Node *p=(Node *)malloc(sizeof(Node));//为一结点开辟空间并初始化

p->data=data;

p->next=NULL;

//进行插入操作

p->next=(*L)->next;

(*L)->next=p;

return True;

}

//向链表中插入元素(尾插法)

int insrlinklist(linklist *L){

int i,length,data;

Node *r=(*L);

printf("请输入尾插法的链表的长度:");

scanf("%d",&length);

for(i=0;i<length;i++){

printf("请输入第%d个结点的值:",i+1);

scanf("%d",&data);

Node *p=(Node *)malloc(sizeof(Node));//为一结点开辟空间并初始化

p->data=data;

p->next=NULL;

//进行插入操作

r->next=p;

r=p;

printf("\n");

}

return True;

}

//删除链表中的元素

int dellinklist(linklist *L,int data){

Node *pre;//指向删除元素的前一个元素

Node *p=(*L);

Node *q;//用来指向要删除的元素

pre=p;

if((*L)->next==NULL){//链表为空

return False;

}else{

while(p->next!=NULL && p->next->data!=data){

p=p->next;

pre=p;

}

if(pre->next==NULL){//查到最后一个结点且该结点不是要删除的结点

return False;

}else{

q=pre->next;

// (*temp)=q->data;//存储删除的元素

pre->next=q->next;

free(q);

return True;

}

}

}

//显示链表

void Display(linklist L){

Node *p=L->next;

printf("链表的全部数据为:\n");

while(p!=NULL){

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

p=p->next;

}

}

void main(){

int length;

int i,j;

int data;

Node *r;//尾指针

linklist L;

Initlinklist(&L);

printf("请输入要插入的结点的长度:");

scanf("%d",&length);

printf("\n");

for(i=0;i<length;i++){

printf("请输入要插入第%d个结点的值:",i+1);

scanf("%d",&data);

inslinklist(&L,data);

printf("\n");

}

Display(L);

printf("\n");

printf("请输入要删除的数据:");

scanf("%d",&data);

j=dellinklist(&L,data);

if(j==False){

printf("链表中没有此结点或者链表为空.");

}else{

Display(L);

}

printf("\n");

printf("关于尾插法插入结点:\n");

Initlinklist(&L);

insrlinklist(&L);

Display(L);

printf("\n");

}

运行结果如下:

请输入要插入的结点的长度:3

请输入要插入第1个结点的值:12

请输入要插入第2个结点的值:13

请输入要插入第3个结点的值:23

链表的全部数据为:

23 13 12

请输入要删除的数据:13

链表的全部数据为:

23 12

关于尾插法插入结点:

请输入尾插法的链表的长度:4

请输入第1个结点的值:12

请输入第2个结点的值:13

请输入第3个结点的值:24

请输入第4个结点的值:35

链表的全部数据为:

12 13 24 35

Press any key to continue
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐