《2022年实现链表的常用操作宣贯 .pdf》由会员分享,可在线阅读,更多相关《2022年实现链表的常用操作宣贯 .pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、链表操作(创建,插入,删除,查询)(头结点赋值的方法)C+ web java 2011-05-19 18:38:13 阅读 26 评论 0 字号:大 中小 订阅#include #include typedef struct node int data; struct node *next; Node; void printList(Node *head); Node *createList(); Node *insertList(Node *head,int elem,int position); Node *deleteElem(Node *head,int elem); Node *Lo
2、cate(Node *head,int elem); int main() Node *head; int elem,position; head = createList(); printList(head); printf( 输入要插入的元素和位置:n); scanf(%d %d, &elem, &position); head = insertList(head,elem,position); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - -
3、- - - - - printList(head); printf( 输入要删除的元素:n); scanf(%d,&elem); head = deleteElem(head, elem); printList(head); printf( 输入要查找的元素:n); scanf(%d,&elem); head=Locate(head,elem); return 0; /*传入表头指针,打印链表*/ void printList(Node *head) Node *p = head; if (p = NULL) printf(List is empty!n); return; while (p
4、!= NULL) printf(%d , p-data); p = p-next; printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - /*创建一个新链表,返回表头指针*/ Node *createList() Node *head, *s, *p; int data; head = (Node *)malloc(sizeof(Node); /创建(初始化)单链表p = head; printf( 输入(不为
5、-1)整数,当要结束时输入- 1:n); scanf(%d,&data); if (data != -1) p-data = data; /判断是否只有头结点 else head-next = NULL; /只有头结点的情况return head; while (1) scanf(%d, &data); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - if (data = -1) break; s = (Node *)mallo
6、c(sizeof(Node); s-data = data; p-next = s; p = p-next; p-next = NULL; return head; /*链表的插入操作,head 为链表表头,elem 为要插入的元素, position 为插入的位置*将 elem 插入至第 position个结点后, position 0 & s-next != NULL) s = s-next; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - -
7、 - - - - i-; if (i 0) /结点数小于输入的位置position printf(Position is wrong!n); return head; p = (Node *)malloc(sizeof(Node); p-data = elem; p-next = s-next; s-next = p; return head; /*删除链表head 中所有的元素elem ,返回头结点head*/ Node *deleteElem(Node *head,int elem) Node *p = head; Node *ptemp; int flag = 0; /记录便表中elem
8、 的个数while (1) if (head-data = elem) /删除头结点的情况 flag+; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - head = head-next; free(p); p = head; else break; while (p-next != NULL) if (p-next-data = elem ) flag+; ptemp = p-next; if (p-next-next !=
9、NULL) p-next = p-next-next; free(ptemp); ptemp = NULL; else / 最后一个结点 free(ptemp); ptemp =NULL; p-next = NULL; break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - else /没有删除结点时,查询下一个结点 p = p-next; printf(%d 个元素%d 已被删除 .n, flag, elem); ret
10、urn head; Node *Locate(Node *head,int elem) Node *p; p=head; while(p-next!=NULL) if(p-next-data!=elem) /让 elem 和链表元素相比较p=p-next; /printf( 未找到你要查询的元素 n); else break; return p-next; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -