关于线性表的链式存储(链表)的创建,头插法,尾插法,删除链表结点的操作
来源:互联网 发布:淘宝开放平台有什么用 编辑:程序博客网 时间: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
- 关于线性表的链式存储(链表)的创建,头插法,尾插法,删除链表结点的操作
- 线性表的链式存储的插入与删除操作
- 线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表
- 线性表的链式存储实现(有头结点)
- 线性表的链式存储(链表)
- 线性表的链式存储(单链表)的基本操作
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- 《线性表的链式存储》
- 线性表的链式存储
- 线性表的链式存储
- 线性表的链式存储
- HDU部分题目算法归纳(转自http://blog.csdn.net/lizuqingblog/article/details/17392941)
- Python源码-调试-安装
- sharepoint 创建人类型,用控件读取和设置
- 147. Insertion Sort List
- strcpy和memcpy的区别
- 关于线性表的链式存储(链表)的创建,头插法,尾插法,删除链表结点的操作
- 数组中的逆序对数
- ARM GCC Inline Assembler Cookbook
- 【LeetCode】Roman to Integer
- HDU 1312 Red and Black(BFS,DFS)
- Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
- c++ 类型转换
- [HOJ]1456、[POJ]2259:Team queue
- Android判断获取内置外置sd卡