#include<stdio.h>
#include<malloc.h>
#include<stdbool.h>
/**
**链表节点的定义
*/
typedef struct Node{
int data;//数据域
struct Node * PNext;//指针域,存放下一个节点的地址
} Node ,* PNode ;
/**
**创建链表
*/
PNode create_list()
{
int len,i;
printf("请输入链表的长度:len=\n");
scanf("%d",&len);
PNode PHead=malloc(sizeof(Node));
PHead->PNext=NULL;
PNode PTail=PHead;//PTail是永远指向尾节点的指针
for(i=0;i<len;i++)
{
int val;
printf("请输入第 %d 个元素的值:", i+1);
scanf("%d",&val);
PNode PNew=malloc(sizeof(Node));
PNew->data=val;
PNew->PNext=NULL;
PTail->PNext=PNew;
PTail=PNew;
}
return PHead; } /**
**对链表进行遍历
*/
void traverse(PNode pHead)
{
PNode p=pHead->PNext;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->PNext;
}
printf("\n");
}
/**
*推断链表是否为空
*/ bool isempty(PNode pHead)
{
if(NULL==pHead->PNext)
{
return true;
}else{
return false;
}
} /**
**获取链表的长度
*/
int list_num (PNode pHead)
{
int num=0;
PNode p=pHead->PNext;
while(p!=NULL)
{
num++;
p=p->PNext;
}
return num;
} /**
*向链表中插入元素
*/
bool insert_list(PNode pHead,int val ,int pos){
//须要找到第pos个位置。而且须要推断这个位置pos是否合法
//i是p所指节点的位置,所以从一開始。为什么要pos-1呢,由于用的是while 当i=pos-1时跳出循环
int i=0;
PNode p=pHead;
while(NULL!=p&&i<pos-1)
{
i++;
p=p->PNext;
}
//假设插入位置过大,那么P=NULL,
//假设插入的位置是0或者负数,那么i>pos-1
if(i>pos-1||NULL==p)
{
printf("插入位置不合法\n");
return false;
}
PNode PNew=malloc(sizeof(PNode));
PNew->data=val;
PNode temp=p->PNext;
p->PNext=PNew;
PNew->PNext=temp;
return true;
} /**
**在链表中删除节点
*/
delete (PNode PHead,int pos , int * pval)
{
int i=0;
PNode p=PHead;
//我们要删除p后面的节点,所以p不能指向最后一个节点 p->next!=NULL
while(p->PNext!=NULL&&i<pos-1){ p=p->PNext;
i++;
}
if(i>pos-1||p->PNext==NULL)
{
printf("删除位置不合法\n");
return false;
}
PNode temp=p->PNext;
p->PNext=temp->PNext;
free(temp); }
int main()
{ PNode PHead= create_list();
if(isempty(PHead))
printf("链表为空\n");
printf("链表的长度为:%d\n",list_num(PHead));
traverse(PHead);
//insert_list(PHead,55,1);
int val;
delete(PHead,6,&val);
traverse(PHead);
return 0;
}

最新文章

  1. [源码]ObjectIOStream 对象流 ByteArrayIOStream 数组流 内存流 ZipOutputStream 压缩流
  2. Java语言的编写规范
  3. 两种JS方法实现斐波那契数列
  4. Java 数据类型和变量
  5. HTML左边和右边是固定的宽度但是中间是自动的布局方式
  6. 主机Window不能访问该虚拟机Linux Samba文件服务提供了一个文件夹
  7. 写一个简单的Web框架
  8. 虚幻引擎UE4如何制作可拖动(Drag and Drop)的背包(Scrollbox)
  9. Vue自定义指令获取DOM元素
  10. Uva 11400 照明系统
  11. (十八)TableView实践(多组汽车品牌展示)
  12. MySQL无法插入中文的解决方案
  13. HDFS退出安全模式
  14. noip 2018游记
  15. SQL代码整理
  16. CentOS下Apache默认安装路径
  17. wireshark 的使用(filter的用法)
  18. PYPI 国内源
  19. Markdown语法初体验
  20. [BZOJ2809]dispatching

热门文章

  1. Vector源码学习
  2. Redis批量执行(如list批量添加)命令工具 —— pipeline管道应用
  3. Python学习笔记(4)--数据结构之元组tuple
  4. HDU——T 3342 Legal or Not
  5. codeforces 558E A Simple Task 线段树
  6. stylus中文版参考文档之综述
  7. 电脑无法上网,DHCP客户端不能正确获取IP地址
  8. PHP 相关配置
  9. 紫书 例题 9-12 UVa 12186 (树形dp)
  10. [Python] Slicing Lists