编程实现顺序存储结构和链式存储结构线性表的建立、查找、插入、删除等基本操作
2017-10-30 17:08
681 查看
#include <stdio.h> #include <stdlib.h> typedef struct LNode{ int data; //链表数据 struct LNode* next; //链表指针 }LNode,*LinkList; typedef enum __bool { false = 0, true = 1, } bool; /*头插法-建立单链表*/ LinkList HeadCreate(LinkList la) { int num; la=(LinkList)malloc(sizeof(LNode)); //建立头结点 la->next=NULL; scanf("%d",&num); while(num!=10) { LNode *p=(LinkList)malloc(sizeof(LNode)); p->data=num; p->next=la->next; la->next=p; scanf("%d",&num); } return la; } /*尾插法-建立单链表*/ LinkList TailCreate(LinkList la) { int num; la=(LinkList)malloc(sizeof(LNode)); la->next=NULL; LinkList s,r=la; scanf("%d",&num); while(num!=10) { s=(LinkList)malloc(sizeof(LNode)); s->data=num; r->next=s; r=s; scanf("%d",num); } r->next=NULL; return la; } /*单链表遍历*/ void TravelList(LinkList la) { LinkList p=la->next; while(p!=NULL) { printf("%d->",p->data); p=p->next; } printf("\n"); } /*单链表的按位查找*/ LinkList GetElem(LinkList la,int i) { int j=1; LNode* p=la->next; if(i<1) return NULL; while(p && j<i) { p=p->next; j++; } return p; } /*单链表的按值查找*/ LinkList LocalElem(LinkList la,int e) { LNode* p=la->next; while(p!=NULL && p->data!=e) p=p->next; return p; } /*单链表插入操作*/ bool InsertList(LinkList la,int i,int e) { //在la链表中的i位置插入数值e int j=1; LinkList p=la,s; while(p && j<i) { p=p->next; j++; } if(p==NULL) return false; if((s=(LinkList)malloc(sizeof(LNode)))==NULL) return false; s->data=e; s->next=p->next; p->next=s; return true; } /*单链表删除操作*/ bool DeleteList(LinkList la,int i) { int j=1; LinkList p=la,q; while(p && j<i) //p指向第i-1个元素 { p=p->next; j++; } if(p==NULL || p->next==NULL) //表示不存在第i-1个和第i的元素 return false; q=p->next; p->next=q->next; free(q); return true; } /*单链表的表长*/ int LengthList(LinkList la) { int nLen=0; LinkList p=la->next; while(p) { p=p->next; nLen++; } return nLen; } /*单链表逆置*/ LinkList Reserve(LinkList la) { if(la==NULL || la->next==NULL) return la; LinkList p=la->next,q=p->next,r=q->next; la->next=NULL; p->next=NULL; while(r!=NULL) { q->next=p; p=q; q=r; r=r->next; } q->next=p; la->next=q; return la; } int main() { LNode la; LinkList p; p=HeadCreate(&la); //头插法创建单链表 TravelList(p); printf("%p\n",GetElem(p,1)); //获得第1个结点地址 InsertList(p,2,10); //在链表的第2个位置插入元素10 TravelList(p); DeleteList(p,3); //删除链表的第3个元素 TravelList(p); printf("%d\n",LengthList(p)); //获得链表长度 p=Reserve(p); TravelList(p); return 0; } //运行结果 //5 6 12 7 8 14 9 3 2 5 14 10 头插法创建链表 //14->5->2->3->9->14->8->7->12->6->5-> 显示链表 //00382490 第一个结点的地址 //14->10->5->2->3->9->14->8->7->12->6->5-> 插入元素值为10的结点 //14->10->2->3->9->14->8->7->12->6->5-> 删除第三个结点 //11 获得链表长度 //5->6->12->7->8->14->9->3->2->10->14-> 链表逆置 //Press any key to continue
相关文章推荐
- (1)顺序表的操作 ① 输入一组整型元素序列,建立线性表的顺序存储结构。 ② 实现该线性表的遍历。 ③ 在该顺序表中查找某一元素,查找成功显示查找元素,否则显示查找失败。 ④ 在该顺序表中删除或插入指
- 编程实现顺序表的以下基本操作:建立顺序表,修改顺序表,插入顺序表,删除顺序表。
- 线性表的基本操作:插入、删除、查找等操作在顺序存储结构和链接存储结构上的算法
- c语言:顺序表的实现(一) 创建,插入,删除,查找,输出等基本操作实现
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 线性表的基本操作,包括:创建、插入、删除、查找等基本操作
- 单链表的基本操作的实现(建立、插入、删除、逆序)
- 线性表的基本操作:新建,插入,删除,查找(C语言版)
- 试用多态实现线性表(队列,串,堆栈),要求具备线性表的基本操作:插入,删除,测长等。
- 线性表的操作(完成表的建立,插入,删除,排序,销毁,查找 )
- 链表(单双链表)用法与基本操作(构建、查找、插入、删除)实现
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 线性表的顺序存储格式基本操作:初始化、插入、删除、查找、打印
- 编程菜鸟的日记-初学尝试编程-顺序表的类定义及其基本操作算法(创建表、元素插入、元素删除、顺序查找、测表空、求表长、输出等)
- 二叉查找树的查找、插入、删除、释放等基本操作的实现(C语言)
- c语言实现线性表的建立,初始化,插入,删除,查找,遍历以及时间复杂度分析
- 关于链表结构的基本操作 c 实现 (创建,插入删除,反转,合并链表,查找,是否有环,链表相交情况)
- 单链表基本操作的实现--创建、插入、查找、删除
- 二叉排序树的基本操作(建立,中序遍历,查找,删除,插入)
- 单链表的建立,查找,插入,删除,测长,打印,逆置操作实现