本程序在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
本文介绍了一个简单的链表数据结构的实现及其基本操作,包括初始化、插入(头插法和尾插法)、删除指定元素和显示链表内容。通过具体代码示例展示了如何使用C语言来实现这些功能。
467

被折叠的 条评论
为什么被折叠?



