C语言实现链表及其操作
2017-01-17 18:51
477 查看
#include <stdio.h> #include <stdlib.h> //定义节点 typedef struct Node { int data; struct Node * PNext; }*PNode,Node; //初始化函数 PNode create_list();//创建节点 //打印出链表 void traverse_list(PNode); //删除节点pos 从1 开始 void delete_node(PNode,int,int *); //插入节点 pos 从1开始 void insert_data(PNode,int ,int ); void main() { //int val; //定义头指针 PNode PHead=NULL; PHead=create_list(); //delete_node(PHead,-1,&val); insert_data(PHead,-2,2); traverse_list(PHead); } PNode create_list() { int len; int i; int val; //定义头节点 PNode PHead=(PNode)malloc(sizeof(Node)); //内存不足等情况会出现分配内存失败的情况 发生错误会返回NULL if(PHead == NULL){ printf("内存分配失败"); } PNode Ptail=PHead; //将头节点的指针域指向NULL 如果没有首节点指针域就是NULL Ptail->PNext=NULL; /* 思路: 定义节点ptail,永远指向尾节点,一开始只有头结点 头结点也是尾节点,所以指向头结点 将新建的PNew节点挂载到ptail节点后面,挂载好之后,ptail指向新建的PNew节点,这样保证ptail永远指向尾节点 */ printf("请输入初始化节点的数量\n"); scanf("%d",&len); for(i=0;i<len;i++){ printf("请输入节点的值"); scanf("%d",&val); PNode PNew=(PNode)malloc(sizeof(Node)); PNew->data=val; Ptail->PNext=PNew; PNew->PNext=NULL; Ptail=PNew; } //返回首节点 return PHead; } void traverse_list(PNode PHead) { PNode p = PHead->PNext; //printf("%d\n",PHead->PNext); if(p == NULL) { printf("链表为空\n"); exit(0); } while(p != NULL){ printf("%d\n",p->data); p=p->PNext; } } void delete_node(PNode PHead,int pos,int * val) { int i=0; if(PHead->PNext==NULL){ printf("节点为空"); exit(0); } if(pos <0){ printf("没有数据"); exit(0); } PNode p=PHead; PNode t; PNode r; while(i != pos){ //printf("%d\n",i=t->data);exit(0); t=p; if(i == pos-1){ //printf("%d\n",i=p->PNext->PNext->data);exit(0); //exit(0); r=p->PNext; t->PNext=p->PNext->PNext; free(r); r=NULL; //exit(0); return; } i++; p=p->PNext; } } void insert_data(PNode PHead,int pos,int val) { int i=0; PNode p=PHead; while(p != NULL && i<pos-1){ p=p->PNext; i++; } if(p == NULL || i>pos -1){ printf("插入错误"); return ; } PNode PNew=(PNode)malloc(sizeof(Node)); if(PNew == NULL){ printf("内存分配失败"); exit(-1); } PNode t=p->PNext; PNew->data=val; PNew->PNext=t; p->PNext=PNew; }
相关文章推荐
- C:C语言实现的链表及其各种链表操作
- c语言实现单链表数据结构及其基本操作
- C语言实现单链表的基本操作及其部分面试题
- c语言实现链表及其基本操作
- 单链表及其基本操作(C语言实现)
- C语言实现单链表的基本操作及其部分面试题
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- C语言之----面向对象的方法实现链表的操作
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- 链表基础操作+实例[C语言实现]
- 学习心得:链表的操作(C语言实现)
- 双向链表的实现与操作(C语言实现)
- C语言实现双向链表的基本操作
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)
- 链表的实现与操作(C语言实现)
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- 单链表操作大全C语言实现
- c语言实现--带头结点单链表操作