单链表的简单操作...
来源:互联网 发布:人工智能的应用领域 编辑:程序博客网 时间:2024/06/06 16:37
已经好几天了。刚好今天有数据结构上机课,就顺便敲了下单链表的一些操作,合并之前写过,这里就没写了...
#include <stdio.h>#include <stdlib.h>#define ERROR 0#define OK 1#define false 0#define true 1typedef int Status;typedef int ElemType; /* ElemType类型根据实际情况而定,这里假设为int */typedef struct node{ElemType data;struct node *next;}node;typedef struct node *LinkList; /* 定义LinkList *//* 初始化顺序线性表 */Status InitList(LinkList *L){ *L=(LinkList)malloc(sizeof(node)); /* 产生头结点,并使L指向此头结点 */ if(!(*L)) /* 存储分配失败 */ return ERROR; (*L)->next=NULL; /* 指针域为空 */ return OK;}/* 操作: 用e返回L中第i个数据元素的值 */Status GetElem(LinkList L,int i,ElemType *e){int j;LinkList p;/* 声明一结点p */p = L->next;/* 让p指向链表L的第一个结点 */j = 1;/* j为计数器 */while (p && j<i) /* p不为空或者计数器j还没有等于i时,循环继续 */{p = p->next; /* 让p指向下一个结点 */++j;}if ( !p || j>i )return ERROR; /* 第i个元素不存在 */*e = p->data; /* 取第i个元素的数据 */return OK;}/* 操作:在L中第i个位置之前插入新的数据元素e,L的长度加1 */Status ListInsert(LinkList *L,int i,ElemType e){int j;LinkList p,s;p = *L;j = 1;while (p && j < i) /* 寻找第i个结点 */{p = p->next;++j;}if (!p || j > i)return ERROR; /* 第i个元素不存在 */s = (LinkList)malloc(sizeof(node)); /* 生成新结点(C语言标准函数) */s->data = e;s->next = p->next; /* 将p的后继结点赋值给s的后继 */p->next = s; /* 将s赋值给p的后继 */return OK;}/* 操作:删除L的第i个数据元素,并用e返回其值,L的长度减1 */Status ListDelete(LinkList *L,int i,ElemType *e){int j;LinkList p,q;p = *L;j = 1;while (p->next && j < i)/* 遍历寻找第i个元素 */{ p = p->next; ++j;}if (!(p->next) || j > i) return ERROR; /* 第i个元素不存在 */q = p->next;p->next = q->next;/* 将q的后继赋值给p的后继 */*e = q->data; /* 将q结点中的数据给e */free(q); /* 让系统回收此结点,释放内存 */return OK;}/* 初始条件:顺序线性表L已存在 *//* 操作结果:依次对L的每个数据元素输出 */void ListTraverse(LinkList L){ LinkList p=L->next; while(p) { printf("%d ",p->data); p=p->next; } printf("\n");}/* 输入n个元素,建立带表头结点的单链线性表L(尾插法) */void CreateListTail(LinkList *L){LinkList p,r;int i,n; printf("请输入元素个数n:\n");scanf("%d",&n);*L = (LinkList)malloc(sizeof(node)); /* L为整个线性表 */r=*L; /* r为指向尾部的结点 */printf("请依次输入n个数:\n");for (i=0; i<n; i++){p = (node *)malloc(sizeof(node)); /* 生成新结点 */scanf("%d",&(p->data));r->next=p; /* 将表尾终端结点的指针指向新结点 */r = p; /* 将当前的新结点定义为表尾终端结点 */}r->next = NULL; /* 表示当前链表结束 */}int main(){ LinkList L; Status i; ElemType e; int id; printf("初始化单链表\n"); i = InitList(&L); if(i) printf("初始化成功!\n\n"); else printf("初始化不成功!\n\n"); printf("创建单链表\n"); CreateListTail( &L ); printf("\n"); printf("查询链表的第i个元素值:\n"); printf("请输入要查询的位置id:\n"); scanf("%d",&id); if(GetElem(L,id,&e)) printf("查询成功,第id个元素值为:%d\n\n",e); else printf("查询失败!\n\n"); printf("插入操作:\n"); printf("请输入插入的元素e:\n"); scanf("%d",&e); printf("请输入要插入的位置id;\n"); scanf("%d",&id); if(ListInsert(&L,id,e)) { printf("插入成功!\n"); printf("插入后的单链表是;\n"); ListTraverse(L); } else printf("插入失败!\n"); printf("\n"); printf("删除操作:\n"); printf("请输入删除的位置id:\n"); scanf("%d",&id); if(ListDelete(&L,id,&e)) { printf("删除成功!\n"); printf("删除后的单链表是;\n"); ListTraverse(L); } else printf("删除失败!\n"); printf("\n"); return 0;}
0 0
- 简单的单链表操作
- 简单的单链表操作
- 单链表的简单操作
- 单链表的简单操作
- 单链表的简单操作
- 单链表的简单操作...
- 单链表的简单操作
- 单链表基本操作的简单实现
- 单链表 双链表 环链表的简单操作
- 数据结构之单链表的简单操作
- 修改后的单链表简单操作
- 单链表的简单操作之输出
- C语言实现单链表的简单操作
- 简单的文件操作
- 简单的异步操作
- FSO的简单操作
- xml的简单操作
- 简单的数据库操作:
- 微服务架构与实践
- 27. Remove Element
- CODE[VS] 2292 图灵机游戏 SPFA求最短路
- 【第五周项目4-数制转换】
- ms-chart使用心得
- 单链表的简单操作...
- 第五周 建立链栈算法库
- ngix错误页面替换,404 502等
- android中如何在得到返回数据后设置图片
- Windows使用Eclipse Neon搭建Java C/C++ Python开发环境
- 第5周项目4-数值转换
- 第五周项目3括号的匹配
- OJ1020
- 第五周项目3—括号的分配