链表练习
来源:互联网 发布:佛山网页美工培训 编辑:程序博客网 时间:2024/05/20 18:43
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node * pnext;
}Node, *pnode;
//函数声明
pnode creat_list();
void traverse_list(pnode phead);
void sort_list(pnode);
bool insert_list(pnode,int,int);
bool delete_list(pnode,int,int *);
void swapPairs(pnode phead,pnode p,pnode q);
void insert_list(pnode phead,int pos);
int main(void)
{
int val;
pnode phead = NULL;
phead = creat_list();
traverse_list(phead);
//sort_list(phead);
//insert_list(phead,4,22);
if(delete_list(phead,4,&val))
{
printf("删除成功,删除的元素为:%d\n",val);
}
else
{
printf("删除失败!删除的元素不存在\n");
}
traverse_list(phead);
//pnode p = NULL;
//pnode q = NULL;
//insert_list(phead,4);
//traverse_list(phead);
return 0;
}
pnode creat_list(void) //创建链表
{
int len;
int i;
int val;
pnode phead = (pnode)malloc(sizeof(Node)); //为头结点开辟空间
if(phead == NULL)
{
printf("分配失败\n");
return 0;
}
pnode ptail = phead; //定义尾指针并初始化
ptail->pnext = NULL; //初始化,避免野指针
printf("请输入你需要生成的链表结点个数:len=");
scanf("%d",&len);
for(i=0;i<len;i++)
{
printf("请输入第%d个节点的值",i+1);
scanf("%d",&val);
pnode pnew = (pnode)malloc(sizeof(Node)); //动态分配空间,每个新节点的地址为pnew
if(pnew == NULL)
{
printf("分配失败\n");
return 0;
}
pnew->data = val; //将输入的数据存入节点中
ptail->pnext = pnew;
pnew->pnext = NULL; //重置,避免野指针
ptail = pnew;
}
return phead;
}
void traverse_list(pnode phead) //遍历
{
pnode p = phead->pnext;
while(p != NULL)
{
printf("%d\t",p->data);
p = p->pnext;
}
printf("\n");
return;
}
void sort_list(pnode phead) //排序
{
pnode p1,p2;
int p;
for(p1=phead->pnext;p1->pnext;p1 = p1->pnext)
{
for(p2=p1->pnext;p2;p2 = p2->pnext)
{
if(p1->data > p2->data)
{
p = p1->data;
p1->data = p2->data;
p2->data = p;
}
}
}
return;
}
/*
bool insert_list(pnode phead,int pos,int val) //插入节点第一种方法
{
int i=0;
pnode p = phead;
while(p != NULL && i < pos-1)
{
p = p->pnext;
++i;
}
if(i > pos-1 || p == NULL)
return false;
pnode pnew = (pnode)malloc(sizeof(Node));
if(pnew == NULL)
{
printf("动态内存分配失败\n");
return 0;
}
pnew->data = val;
pnode q = p->pnext;
p->pnext = pnew;
pnew->pnext = q;
return true;
}*/
void insert_list(pnode phead,int pos) //插入节点第二种方法
{
pnode p;
pnode q = (pnode)malloc(sizeof(Node));
q->pnext = NULL;
int i = 0;
for(p = phead->pnext;p;p = p->pnext)
{
i++;
if(pos == i)
break;
}
printf("请输入要插入的节点的数据:");
scanf("%d",&q->data);
q->pnext = p->pnext;
p->pnext = q;
return;
}
/*
bool delete_list(pnode phead,int pos,int *pval) //删除节点第一种方法
{
int i=0;
pnode p = phead;
while(p->pnext != NULL && i < pos-1)
{
p = p->pnext;
++i;
}
if(i > pos-1 || p->pnext == NULL)
return false;
pnode q = p->pnext;
*pval = q->data;
p->pnext = p->pnext->pnext;
free(q);
q = NULL;
return true;
}
*/
bool delete_list(pnode phead,int pos,int *pval) //删除节点第二种方法
{
int i=0;
pnode q = NULL;
pnode p = phead;
for(p = phead->pnext; p; p = p->pnext)
{
i++;
if(pos-1 == i)
{
q = p->pnext;
break;
}
}
*pval = q->data;
p->pnext = p->pnext->pnext;
free(q);
q = NULL;
return true;
}
- 写个内核链表,练习练习
- 链表练习
- 链表操作练习
- 链表练习
- 链表练习2
- 链表练习
- E2_链表练习
- 链表练习
- 链表练习
- 基础链表练习
- 链表练习
- 反转链表练习
- Leetcode__链表练习
- 链表练习
- 链表练习
- 链表练习
- 链表练习代码
- 简单链表练习
- 计算客 商品推荐走马灯(简单)(求区间所有连续的回文串价值)
- mybatis 源码系列 组件之 cache
- ubuntu下配置vim插件时注意事项
- Python学习-centos7.0下matplotlib安装及问题解决
- SQL脚本积累之六-----游标的使用示例
- 链表练习
- 2.2 什么是lambda函数?它有什么好处?
- 黑马程序员——Java基础---io流(io中的其他对象)
- 各种传送门
- 中文转为unicode编码
- webservice xml soap wsdl 必要知识
- Latch-Learned Arrangements of Three Patch Codes (1)
- 初步认识机房收费
- HDU 2032 杨辉三角