C语言线性表的基本操作
2015-07-13 11:31
543 查看
/* /*1.创建链表 /*2.获取链表长度 /*3.向指定位置插入链表,成功返回1,否则返回0 /*4.删除链表的某个节点 /*5.输出链表 /*6.判断链表是否为空,不空返回1,否则返回0 */ #include <stdio.h> #include <stdlib.h> #define ElementType int typedef struct Node{ ElementType e; struct Node *next; }Node; //创建链表 void Create(Node **phead){ ElementType e; while(1){ scanf("%d",&e); //输入-1结束 if(e==-1) return; //申请新节点 Node *p = (Node*)malloc(sizeof(Node)); p->e = e; p->next = NULL; Node *last = *phead; //判断链表头是否为空 if(last){ //寻找链表尾插入 for(last=*phead;last->next;last=last->next); last->next = p; } else{ *phead = p; } } } int GetSize(Node **phead){ Node *last; int size = 0; for(last=*phead;last;last=last->next){ size++; } return size; } //向指定位置插入链表,成功返回1,否则返回0 int Insert(Node **phead,int k,ElementType e){ //判断链头是否为空 if(!(*phead)||k<0){ return 0; } else{ Node *p = (Node*)malloc(sizeof(Node)); Node *previous; Node *last; p->e = e; p->next = NULL; //插入链表头 if(k==0){ p->next = *phead; *phead = p; } //插入链尾 else if(k==GetSize(phead)){ for(last=*phead;last->next;last=last->next); last->next = p; } //插入指定节点 else{ int i; previous = *phead; for(i = 0;i<k-1;i++) previous = previous->next; p->next = previous->next;; previous->next = p; } } return 1; } int Remove(Node **phead,int k){ Node *previous; Node *last; int i; //判断链表是否为空,删除节点位置是否合法 if(!(*phead)||k<0){ return 0; } else{ //删除链头 if(k==0){ last = *phead; *phead = last->next; free(last); } //删除链尾 else if(k==GetSize(phead)-1){ for(last=*phead;last->next;previous = last,last=last->next); free(last); previous->next = NULL; } //删除节点 else{ previous = *phead; for(i = 0;i<k-1;i++) previous = previous->next; last=previous->next; previous->next = last->next; free(last); } } return 1; } //判断链表是否为空 int IsEmpty(Node **phead){ if(*phead) return 1; return 0; } //输出链表所有节点 void Print(Node **phead){ Node *last; for(last=*phead;last;last=last->next){ printf("%d\t",last->e); } printf("\n"); } main(){ Node *list; Create(&list); printf("size of list:%d\n",GetSize(&list)); Insert(&list,0,6); Remove(&list,2); Print(&list); }
相关文章推荐
- C++命名空间
- C语言之void类型及void指针
- C语言之void类型及void指针 分类: C/C++ 2015-07-13 11:24 8人阅读 评论(0) 收藏
- 简介C/C++预处理器的一些工作
- 用C语言来实现一个简单的虚拟机
- C++ stack queue vector 中 易混淆的常用方法 浅析
- c++primer之string
- ac算法--c++实现
- c++标准库IO
- 指向函数的指针 分类: C/C++ 2015-07-13 11:03 14人阅读 评论(0) 收藏
- C/C++典型面试题目整理001
- 关于C++ const 的全面总结
- C++ 数组参数 深入分析
- C++ 字符串编程训练2
- C语言结构体(二)
- C语言变量名和地址的关系(一)
- opencv源码分析之二:cvhaartraining.cpp
- C++ 字符串编程训练1
- c语言ASCII码表详解(一)
- C++ 容器类