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

来源:互联网 发布:淘宝开放平台有什么用 编辑:程序博客网 时间:2024/04/30 12:58

本程序在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

0 0
原创粉丝点击