性线表----循环单链表的基本的操作
来源:互联网 发布:天敏网络机顶盒root 编辑:程序博客网 时间:2024/05/17 01:41
#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>/** *@Name:线性表--循环单链表和基本操作 *@Description:循环单链表的创建,元素的查找、插入、删除和修改和移动。 *@Author:Freedoman *@Date: 2014-8-6 */struct Node /*定义结点*/{ int data;/*当前结点存储的数据*/ struct Node * next; /*指向下一个结点的指针*/};typedef struct Node * PNode;/*函数声明*/PNode createNullCirLinkedList();int isNullCirLinkedList(PNode head);int initializeCirLinkedList(PNode head);int insertBeforeElement(PNode head);int insertAfterElement(PNode head);int deleteElement(PNode head);int findBeforAfterNode(PNode head);void printfCirLinkedList(PNode head);/*-------创建带头结点的空循环链表---------*/PNode createNullCirLinkedList(){ printf("创建带头结点的空循环链表\n"); PNode head = NULL; head = (PNode) malloc(sizeof(Node)); if(head == NULL){ printf("创建失败!\n"); }else{ // 循环链表而非单链表 head->next = head; head->data = -1; printf("创建成功!\n"); } return head;}/*----------判断当前循环链表是否为空------------*/int isNullCirLinkedList(PNode head){ if(head->next == head){ printf("当前循环链表为空!\n"); return 1; } else{ printf("当前循环链表不为空!\n"); return 0; }}/*----------根据输入的元素查找结点------------*/PNode findNodeByEle(PNode head, int data){PNode p = head;if(!(isNullCirLinkedList(head))){// 循环移动指针查找结点while(p->next != head){if(p->next->data != data){p = p->next;continue;} else{// 找到结点 return p->next;}}printf("没有找到指定元素!\n");}return head; } /*---初始化当前循环链表,默认向结尾插入元素---*/int initializeCirLinkedList(PNode head){ printf("初始化当前循环链表\n"); PNode p = head,temp; int data,count = 0; if(isNullCirLinkedList(head)){ while(1){ printf("请输入元素(-1结束)>>>"); scanf("%d",&data); if( data != -1){ if(count++ == 0){ temp = (PNode)malloc(sizeof(Node)); temp->data = data; temp->next = head; head->next = temp; }else{ temp = (PNode)malloc(sizeof(Node)); temp->data = data; temp->next = head; p->next->next = temp; p = p->next; } } else{ break; } } printfCirLinkedList(head); return 1; } printf("不能初始化!\n"); return 0;}/*-------在指定元素之前插入元素------------*/int insertBeforeElement(PNode head){printf("在指定元素之前插入元素\n");int data,ele,i;PNode p = head;if(!isNullCirLinkedList(head)){printf("请指定元素>>>");scanf("%d",&data);printf("请输入要插入的元素>>>");scanf("%d",&ele); // 循环移动指针定位元素 while(p->next != head){if(p->next->data != data){p = p->next;continue;}else{// 插入元素 PNode temp = (PNode)malloc(sizeof(Node));temp->data = ele;temp->next = p->next;p->next = temp;printf("插入成功!\n");printfCirLinkedList(head);return 1;}}printf("没有找到指定元素!\n");} return 0;}/*-------在指定元素之后插入元素------------*/int insertAfterElement(PNode head){printf("在指定元素之后插入元素\n");int data,ele,i;PNode p = head;if(!isNullCirLinkedList(head)){printf("请指定元素>>>");scanf("%d",&data);printf("请输入要插入的元素>>>");scanf("%d",&ele);// 循环移动指针查找元素while(p->next != head){if(p->next->data != data){p = p->next;continue;}else{// 插入指定元素 PNode temp = (PNode)malloc(sizeof(Node));temp->data = ele;temp->next = p->next->next;p->next->next = temp;printf("插入成功!\n");printfCirLinkedList(head);return 1; }}printf("没有找到指定元素\n");}return 0;}/*--------------删除指定元素-------------*/int deleteElement(PNode head){printf("删除指定元素\n");int data;PNode p = head;if(!isNullCirLinkedList(head)){printf("请指定元素>>>");scanf("%d",&data);// 循环移动指针查找元素while(p->next != head){if(p->next->data != data){p = p->next;continue;}else{// 删除结点 p->next = p->next->next;printf("删除成功!\n");printfCirLinkedList(head);return 1;}}printf("没有找到指定元素!\n"); }return 0;} /*------查找指定元素的前驱与后继结点------*/int findBeforAfterNode(PNode head){printf("查找指定元素的前驱与后继结点\n");int data;PNode p = head;if(!isNullCirLinkedList(head)){printf("请指定元素>>>");scanf("%d",&data);// 循环移动指针查找元素while(p->next != head){if(p->next->data != data){ p = p->next; continue;}else{printf("前驱结点>>>>%d\n",p->data);printf("后继结点>>>>%d\n",p->next->next->data);return 1;}} printf("没有找到指定元素!\n");}return 0;}/*-------打印当前循环链表-----------------*/void printfCirLinkedList(PNode head){ PNode p = head; printf("打印["); do{ printf(" %d ",p->data); p = p->next; }while(p != head); printf(" %d ",p->data); printf("]\n");}int main(){ printf("\n---循环链表的基本操作---\n"); int input; PNode head = NULL; PNode q = NULL; while(1){ printf("\n 1_创建带头结点的空循环链表\n 2_判断当前循环链表是否为空\n"); printf(" 3_初始化当前循环链表\n 4_在指定元素之前插入元素\n 5_在指定元素之后插入元素\n"); printf(" 6_删除指定元素\n 7_查找指定元素的前驱与后继结点\n"); printf("\n请选择>>>"); scanf("%d",&input); switch(input){ case 1 : head = createNullCirLinkedList(); break; case 2 : isNullCirLinkedList(head); break; case 3 : initializeCirLinkedList(head); break; case 4 : insertBeforeElement(head); break; case 5 : insertAfterElement(head); break; case 6 : deleteElement(head); break; case 7 : findBeforAfterNode(head); break; case 8: printfCirLinkedList(PNode head);break;default :printf("输入有误!\n");break; } } return 0;}
0 0
- 性线表----循环单链表的基本的操作
- 循环单链表的基本操作
- 循环单链表的基本操作
- 循环单链表的基本操作
- 非循环单链表的基本操作
- 带头循环单链表的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 五更乌洞洞,下午晒死侬
- poj 3233 Matrix Power Series(等比矩阵求和)
- jQuery EasyUI属性汇总
- ##连通性##
- Constructing Roads
- 性线表----循环单链表的基本的操作
- js 键盘事件 对应的 keycode
- python dict sorted 排序
- packageinfo,resolveInfo,applicationInfo 等区别
- 2014多校3,hdu4888,hdu4893题解
- 打赌:你的中小企业还能继续存活5年吗?
- linux下实现生产者消费者问题
- 联想yoga win8升级到win8.1失败
- hdu4912 贪心+lca