嵌入式学习17(单链表)
来源:互联网 发布:七星彩计划软件 编辑:程序博客网 时间:2024/06/05 07:06
#include <stdio.h>#include <stdbool.h>#include <stdlib.h>typedef int DataType;struct Node{ DataType data; struct Node* next;};typedef struct Node Link,*pLink; //变量//指针变量/********1/创建链表********/ //头插法//类似栈bool InsertNode(pLink* top,DataType data){ pLink pNew=(pLink)malloc(sizeof(Link));//1 申请节点空间 if(NULL==pNew) return false; pNew->data=data;//2 存值 //3 建立联系 pNew->next=*top;//top第一次为空 *top=pNew; return true;}/******2 遍历节点*******/void Show(pLink top){ while(top!=NULL) { printf(" %d",top->data); top=top->next; }}/******3 查找节点,成功返回数据地址,失败返回NULL******/DataType* search(pLink top,DataType key){ while(NULL!=top && top->data!=key) { top=top->next; } if(NULL==top) return NULL; else return &(top->data);}/********4 修改key的值********/bool update(int key,pLink top,int newvalue){ DataType* pData=search(top,key); if(pData!=NULL) { *pData=newvalue; return true; } return false;}/********5 删除节点*********///找前驱节点pLink frontNode(int key,pLink link){ pLink pfri=NULL,psec=link; while(NULL!=psec && psec->data!=key) { pfri=psec; psec=psec->next; } if(NULL!=psec) return pfri; else return NULL;//是头结点或不存在的节点}//删除元素:bool delete(int key,pLink* plink){//13 12 11 10 9 头部/无此节点---无前驱 pLink pNode=frontNode(key,*plink); pLink pLoc=NULL; //头节点 if(NULL!=pNode)//非头节点 { pLoc=pNode->next;//记录key节点 pNode->next=pNode->next->next; } else if((*plink)->data==key)//如果是头节点 { pLoc=*plink; *plink=(*plink)->next; } //查找成功 if(NULL!=pLoc) { free(pLoc); return true; } return false;}void main(){ pLink head=NULL; InsertNode(&head,1); InsertNode(&head,2); InsertNode(&head,3); Show(head); putchar(10); delete(3,&head); Show(head); putchar(10);}
上面是老师的标准写法,对问题考虑很全面,然后我之前也自己看过一些教科书籍,对上面部分功能有不同的解法,给大家借鉴一下。
/****** 修改,把第n个元素修改为x*******/void mod(pLink top,int n,DataType x){ int i=1; while(i!=n) { top=top->next; i++; } top->data=x;}/******** 删除节点*********/void DeleteHead(pLink* top){ pLink head=*top; *top=(*top)->next;//优先级问题!!没有括号报错(在非结构或联合中请求next) free(head);}void DeleteMid(pLink top,int key)//删除中间和删除尾巴一样{ pLink tmp; while(top->next->data!=key) { top=top->next; } tmp=top->next; top->next=top->next->next; free(tmp);}/******** 尾插法*******/void InsertNode1(pLink *top,DataType data){ pLink head; head=*top; pLink pNew=(pLink)malloc(sizeof(pLink)); pNew->data=data; pNew->next=NULL; if(head==NULL) { *top=pNew; } if(head!=NULL){ while(head->next!=NULL) { head=head->next; } head->next=pNew; }}
阅读全文
0 0
- 嵌入式学习17(单链表)
- 学习嵌入式(学习嵌入式linux)
- 嵌入式学习(前言)
- 嵌入式学习笔记 (3)
- 嵌入式学习规划(一)
- 如何学习嵌入式(转载)
- 嵌入式学习笔记(一)
- (收藏)嵌入式学习路线
- wpa_supplicant 嵌入式学习(一)
- 嵌入式学习日记(一)
- 嵌入式学习1(Linux)
- 嵌入式学习日记(二)
- 嵌入式学习日记(三)
- 嵌入式学习日记(四)
- 嵌入式学习日记(五)
- 嵌入式学习日记(六)
- 嵌入式学习日记(七)
- 嵌入式学习日记(八)
- HDU 2955 Robberies(01背包问题)
- 红黑树(Red Black Tree)
- FFmpeg-examples-transcode_aac
- 集成学习简介
- 【Dubbo+Zookeeper】初见Zookeeper
- 嵌入式学习17(单链表)
- 【二分+RMQ】hdu 5289 Assignment
- .isblank()和.isempty()的比较
- 【Java深入】创建对象的5种方式
- 定期删除阿里云过期的object文件
- HttpClient
- [USACO2.4]分数化小数 Fractions to Decimals
- 80. Remove Duplicates from Sorted Array II
- 科大讯飞麦克风阵列修改唤醒词