单链表的9的操作
来源:互联网 发布:人工智能机器人龙头股 编辑:程序博客网 时间:2024/04/27 14:49
#include<stdio.h>
#include<malloc.h>
typedef int ElementType;
#define ERROR -1
#define OK 1
typedef struct node
{
ElementType Element;
struct node *next;
}LinkList;
//创建链表
LinkList *CreateList()
{
LinkList *head;
head=(LinkList *)malloc(sizeof(LinkList));//创建带头结点的空链表
head->next=NULL;
return head;
}
//求链表的元素个数
ElementType Size(LinkList *L)
{
LinkList *p=L->next;
int k=0;
while(p)
{
k++;
p=p->next;
}
return k;
}
//在链表l的第k个位置插入元素x
int Insert(LinkList *L,int k, ElementType x)
{
if(k < 1)return ERROR;
LinkList *p=L, *s;
int i=0;
while(p && i<k-1){p=p->next;i++;}//寻找第k-1个节点
if (!p || i>k-1) return ERROR;
s = (LinkList*)malloc(sizeof(LinkList));
s->Element=x;
s->next = p->next;
p->next = s;
return OK;
}
//删除链表L的第k个元素
int Delete(LinkList *L,int k, ElementType *e)
{
if(k < 1)return ERROR;
LinkList *p=L,*q;
int i=0;
while(p && i<k-1){p=p->next;i++;}//寻找第k-1个节点
if (!p || i>k-1) return ERROR;
q=p->next;
p->next=q->next ;
*e=q->Element;
free(q);
return OK;
}
int Delete2(LinkList *L,int k, ElementType *e)
{
if(k < 1)return ERROR;
LinkList *p=L,*q;
int i=0;
while( p->next && i<k-1){p=p->next;i++;}//寻找第k个节点,并另p指向其前驱
if (!p->next|| i>k-1) return ERROR;
q=p->next;
p->next=q->next ;
*e=q->Element;
free(q);
return OK;
}
//判断链表是否为空
int IsEmpty(LinkList *L)
{
return L->next == NULL;
}
//求链表第k个元素的值
ElementType GetData(LinkList *L,int k)
{
LinkList *p = L;
int i=0;
if(k < 1)return ERROR;
while(p && i<k){p=p->next;i++;}//寻找第k个节点
if (!p || i>k) return ERROR;
k = p->Element;
return k;
}
//查找值为x的元素
LinkList * Find(LinkList *L,ElementType x)
{
LinkList *p=L;
while(p = p->next)
{
if (p->Element == x)break; //或者LinkList *p=L->next;while(p && p->Element != x)p = p->next;
}
if (p)
return p;
}
//输出链表
void Print(LinkList *L)
{
LinkList *p=L->next;
printf("输出元素为:\n");
while(p)
{
printf("%3d",p->Element);
p = p->next;
}
}
//清空链表
void Clear(LinkList *L)
{
LinkList *p,*q;
p = L->next;
while(p)
{
q=p->next;//或者while(q!=NULL){q=p;p=p->next;free(q);}
free(p);
p=q;
}
L->next = NULL;
}
int main()
{int a,e;
LinkList *list = CreateList();
a=IsEmpty(list);
if(a==1)
printf("该表为空表\n");
printf("\n");
Insert(list, 1, 10);
Insert(list, 1, 20);
Insert(list, 2, 50);
Delete2(list, 3,&e);
//Delete(list, 3,&e);
printf("删除的元素为:%d",e);
printf("\n");
a=IsEmpty(list);
if(a==0)
printf("该表为非空表\n");
Insert(list, 1, 30);
Insert(list, 1, 40);
printf("元素为30的地址为:%o\n", Find(list,30));
printf("元素为40的地址为:%o\n", Find(list,40));
printf("链表的元素个数为:%d\n", Size(list));
Print(list);
printf("链表的第1个元素为:%d",GetData(list, 1));
}
#include<malloc.h>
typedef int ElementType;
#define ERROR -1
#define OK 1
typedef struct node
{
ElementType Element;
struct node *next;
}LinkList;
//创建链表
LinkList *CreateList()
{
LinkList *head;
head=(LinkList *)malloc(sizeof(LinkList));//创建带头结点的空链表
head->next=NULL;
return head;
}
//求链表的元素个数
ElementType Size(LinkList *L)
{
LinkList *p=L->next;
int k=0;
while(p)
{
k++;
p=p->next;
}
return k;
}
//在链表l的第k个位置插入元素x
int Insert(LinkList *L,int k, ElementType x)
{
if(k < 1)return ERROR;
LinkList *p=L, *s;
int i=0;
while(p && i<k-1){p=p->next;i++;}//寻找第k-1个节点
if (!p || i>k-1) return ERROR;
s = (LinkList*)malloc(sizeof(LinkList));
s->Element=x;
s->next = p->next;
p->next = s;
return OK;
}
//删除链表L的第k个元素
int Delete(LinkList *L,int k, ElementType *e)
{
if(k < 1)return ERROR;
LinkList *p=L,*q;
int i=0;
while(p && i<k-1){p=p->next;i++;}//寻找第k-1个节点
if (!p || i>k-1) return ERROR;
q=p->next;
p->next=q->next ;
*e=q->Element;
free(q);
return OK;
}
int Delete2(LinkList *L,int k, ElementType *e)
{
if(k < 1)return ERROR;
LinkList *p=L,*q;
int i=0;
while( p->next && i<k-1){p=p->next;i++;}//寻找第k个节点,并另p指向其前驱
if (!p->next|| i>k-1) return ERROR;
q=p->next;
p->next=q->next ;
*e=q->Element;
free(q);
return OK;
}
//判断链表是否为空
int IsEmpty(LinkList *L)
{
return L->next == NULL;
}
//求链表第k个元素的值
ElementType GetData(LinkList *L,int k)
{
LinkList *p = L;
int i=0;
if(k < 1)return ERROR;
while(p && i<k){p=p->next;i++;}//寻找第k个节点
if (!p || i>k) return ERROR;
k = p->Element;
return k;
}
//查找值为x的元素
LinkList * Find(LinkList *L,ElementType x)
{
LinkList *p=L;
while(p = p->next)
{
if (p->Element == x)break; //或者LinkList *p=L->next;while(p && p->Element != x)p = p->next;
}
if (p)
return p;
}
//输出链表
void Print(LinkList *L)
{
LinkList *p=L->next;
printf("输出元素为:\n");
while(p)
{
printf("%3d",p->Element);
p = p->next;
}
}
//清空链表
void Clear(LinkList *L)
{
LinkList *p,*q;
p = L->next;
while(p)
{
q=p->next;//或者while(q!=NULL){q=p;p=p->next;free(q);}
free(p);
p=q;
}
L->next = NULL;
}
int main()
{int a,e;
LinkList *list = CreateList();
a=IsEmpty(list);
if(a==1)
printf("该表为空表\n");
printf("\n");
Insert(list, 1, 10);
Insert(list, 1, 20);
Insert(list, 2, 50);
Delete2(list, 3,&e);
//Delete(list, 3,&e);
printf("删除的元素为:%d",e);
printf("\n");
a=IsEmpty(list);
if(a==0)
printf("该表为非空表\n");
Insert(list, 1, 30);
Insert(list, 1, 40);
printf("元素为30的地址为:%o\n", Find(list,30));
printf("元素为40的地址为:%o\n", Find(list,40));
printf("链表的元素个数为:%d\n", Size(list));
Print(list);
printf("链表的第1个元素为:%d",GetData(list, 1));
}
阅读全文
0 0
- 单链表的9的操作
- 简单的单链表操作
- 单链表的基本操作
- 简单的单链表操作
- 单链表的基本操作
- 单链表的操作(C#)
- 单链表的操作
- 单链表的各种操作
- 单链表的操作实现
- 单链表的 操作
- 单链表的基本操作
- 单链表的一些操作
- 单链表的操作
- 关于单链表的操作
- 单链表的各种操作
- 单链表的常用操作
- 单链表的一些操作
- 单链表的一些操作
- 配置YUM源出现Errno 14 Could not open/read repomd.xml 错误的解决办法
- Data-Information-Knowledge-Wisdom Pyramid
- 分享一款将less编译为css的神器
- ExoPlayer
- bzoj 1982: [Spoj 2021]Moving Pebbles 博弈论
- 单链表的9的操作
- 带你领略世豪先生的风采
- [读书笔记]大型网站技术架构
- hdu4152 二进制枚举
- Maven仓库详解
- 1022. D进制的A+B (20)
- 【Codeforces Round #397】Codeforces 765F Souvenirs【解法二】
- 两个堆栈实现队列,两个队列实现堆栈
- java下载文件案例(带源码)