单链表的基本操作
2014-09-01 22:09
429 查看
#include <iostream> #include <stdio.h> #include <string.h> #include <conio.h> using namespace std; typedef struct Node{ int data; struct Node *next; }node; //创建单链表 node *create(){ node *head,*p,*s; int x,cycle = 1; head = (node*)malloc(sizeof(node)); p = head; while(cycle){ printf("\nplease input the data:"); scanf("%d",&x); if(x!=0){ s = (node*)malloc(sizeof(node)); s->data = x; printf("\n%d",s->data); p->next = s; p = s; }else{ cycle = 0; } } head = head->next; p->next = NULL; print("\n %d ",head->data); return head; }
//单链表测长 int length(node *head){ int n = 0; node *p; p = head; while(p!=NULL){ p = p->next; n++; } return n; }
//单链表打印 void print(node *head){ node *p; int n; n = length(head); printf("\nNow,These %d records are:\n",n); p = head; if(head!=NULL){ while(p!=NULL){ printf("\n %d ",p->data); p = p->next; } } }
//单链表删除节点 node *del(node *head,int num){ node *p1,*p2; p1 = head; while(num!=p1->data && p1->next!=NULL){ p2 = p1; p1 = p1->next; } if(num == p1->data){ if(p1==head){ head = p1->next; free(p1); }else{ p2->next = p1->next; free(p1); } }else{ printf("\n%d could not been found:,num); } return head; }
//单链表的插入 node *insert(node *head,int num){ node *p0,*p1.*p2; p1 = head; p0=(node *)malloc(sizeof(node)); p0->data = num; while(p0->data>p1->data && p1->next!=NULL){ p2=p1;p1=p1->next; } if(p0->data <= p1->data){ if(head == p1){ p0->next = p1; head = p0; }else{ p2->next = p0; p0->next = p1; } }else{ p1->next = p0;p0->next = NULL: } return head; }
//单链表的排序 node *sort(node *head){ node *p,*p2,*p3; int n; int temp; n = length(head); if(head == NULL || head->next == NULL) return head; for(int j =1;j<n;++j){ p = head; for(int i = 0;i<n-j;++i){ if(p->data>p->next->data){ temp = p->data; p->data = p->next->data; p->next->data =temp; } p = p->next; } } return head; }
//单链表的逆置 node *reverse(node *head){ node *p1.*p2.*p3; if(head == NULL || head->next == NULL) return head; p1= head,p2 = p1->next; while(p2){ p3 = p2->next; p2->next = p1; p1 = p2; p2 = p3; } head->next = NULL; head = p1; return head; }
//删除单链表的头元素 void removeHead(node* head){ node *p; p = head->next; head->next = p->next; free(p); }
//不知道节点N的值,遍历一次得到中间节点 void searchmid(node* head,node* mid){ node *temp = head; while(head->next->next != NULL){ head = head->next->next; temp = temp->next; mid = temp; } }
相关文章推荐
- 算法(05):基本链表的操作及双向链表
- 链表的基本操作
- 双链表基本操作
- 带头结点的单链表的12个基本操作
- C++链表基本操作
- 链表的基本操作
- 单链表的基本操作
- bo2-8.cpp 不带头结点的单链表(存储结构由c2-2.h定义)的部分基本操作(9个)
- bo2-4.cpp设立尾指针的单循环链表(存储结构由c2-2.h定义)的12个基本操作
- 单链表和双链表上的基本操作
- 数据结构类型定义及基本操作汇总(一)--线性表,单链表,栈和队列
- 用C语言编写一个包含链表的初始化、插入、删除、查找等基本操作的程序。
- 链表队列与二叉树基本操作
- bo2-9.cpp 不带头结点的单链表(存储结构由c2-2.h定义)的部分基本操作(2个)
- 链表的基本操作
- 单链表的基本操作
- 双向循环链表的基本操作
- 单链表基本操作c语实现
- 链表的一些基本操作
- 链表的基本操作