单链表的基本操作
来源:互联网 发布:众筹平台数据统计 编辑:程序博客网 时间:2024/05/14 08:32
/** 单链表的基本操作*/#include<stdio.h>#include<malloc.h>typedef int DataType;typedef struct node{ DataType data; struct node *next;} node, *LinkList;/** 创建空表:*/void Init_List(LinkList *L){ *L=(LinkList)malloc(sizeof(node)); (*L)->next=NULL;}/** 头插法:*/void InPut_FromHead_List(LinkList L){ node *s; scanf("%d",&L->data); int i; for(i=0; i<L->data; i++) { s=(LinkList)malloc(sizeof(node)); scanf("%d",&s->data); s->next=L->next; L->next=s; }}/** 尾插法:*/void InPut_FromTail_List(LinkList L){ node *s,*r=L; scanf("%d",&L->data); int i; for(i=0; i<L->data; i++) { s=(node*)malloc(sizeof(node)); scanf("%d",&s->data); r->next=s; r=s; } r->next=NULL;}/** 输出:*/void OutPut_List(LinkList L){ node* q=L->next; while(q!=NULL) { printf("%d ",q->data); q=q->next; } putchar('\n');}/** 递归输入单链表:心情不错用递归写着玩, 写的不好不要喷啊。。*/LinkList Input(int n){ LinkList L=(LinkList)malloc(sizeof(node)); scanf("%d",&L->data); if(n<=1) L->next=NULL; else L->next=Input(n-1); return L;}LinkList Create_List(){ LinkList L=(LinkList)malloc(sizeof(node)); scanf("%d",&L->data); if(L->data) L->next=Input(L->data); else L->next=NULL; return L;}/** 递归 逆序输出单链表: 怎么 正序输出 呢? 我知道但我不告诉你。*/void PostPrint_List(LinkList L){ L=L->next; if(L==NULL) return ; PostPrint_List(L); printf("%d ",L->data);}/** 非递减 排序:*/void Sort_List(LinkList L){ node *p,*q; DataType temp; for(p=L->next; p!=NULL; p=p->next) { for(q=p->next; q!=NULL; q=q->next) { if(q->data < p->data) { temp=q->data; q->data=p->data; p->data=temp; } } }}/** 判断是否为空:*/int IsEmpty_List(LinkList L){ return (L->next==NULL);}/** 查找:*/node* FindNode_List(LinkList L,DataType key){ node* q=L->next; while(q!=NULL) { if(q->data==key) return q; q=q->next; } return NULL;}/** 删除:*/void Delete_List(LinkList L,int index){ node *s=L,*r; int i=0; while(s!=NULL&&i<index-1) { s=s->next; i++; } r=s->next; s->next=(s->next)->next; free(r);}/** 增加:*/void Insert_List(LinkList L,int index,DataType key){ node *s=L,*new_s; int i=0; while(s!=NULL&&i<index-1) { s=s->next; i++; } new_s=(node*)malloc(sizeof(node)); new_s->data=key; new_s->next=s->next; s->next=new_s;}int main(){ // freopen("A.in","r",stdin); // 测试数据 5 3 2 4 1 6// node *q;// Init_List(&q); // attention !!!!//// InPut_FromTail_List(q);// // InPut_FromHead_List(q); LinkList q=Create_List(); OutPut_List(q); Sort_List(q); OutPut_List(q); PostPrint_List(q); return 0;}
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作!
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- 单链表的基本操作
- ubuntu设置网络
- linux内核定时器
- 4.1 iOS开发视频教程—NSNumber数字的使用
- python 多进程使用的一个假象
- 从事前端开发必须要了解的CSS原理
- 单链表的基本操作
- Sicily1001 Alphacode
- 微软面试题:求整数随机数构成的数组中找到长度大于=3的最长的等差数列
- LINUX c++线程池框架
- 别的电脑上的ISE工程放到本电脑上后使用ModelSim仿真时出错的解决办法
- 使用boolalpha操作子
- verilog系统任务对文件的读写操作
- 统计文章的单词各数
- netstat参数