顺序表与单链表基本运算算法

上传人:第*** 文档编号:33902273 上传时间:2018-02-19 格式:DOC 页数:6 大小:50.50KB
返回 下载 相关 举报
顺序表与单链表基本运算算法_第1页
第1页 / 共6页
顺序表与单链表基本运算算法_第2页
第2页 / 共6页
顺序表与单链表基本运算算法_第3页
第3页 / 共6页
顺序表与单链表基本运算算法_第4页
第4页 / 共6页
顺序表与单链表基本运算算法_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《顺序表与单链表基本运算算法》由会员分享,可在线阅读,更多相关《顺序表与单链表基本运算算法(6页珍藏版)》请在金锄头文库上搜索。

1、顺序表的基本运算实现假设表中数据元素的值为整数;#define MAX 100 /定义表最大长度容量,实际用不到那么多/顺序表结构定义typedef struct int dataMAX; /存放表结点int length; /当前表长度 SeqList;/创建初始顺序表SeqList *createList(int size)int i;SeqList *list;list=(SeqList *)malloc(sizeof(SeqList); /分配空间printf(请输入顺序表中的整数,元素个数为%dn,size);for(i=0;idatai) ; /逐一向顺序表中输入元素list-le

2、ngth=size; /顺序表的长度赋值return list;/打印顺序表中的现有元素printList(SeqList *list)int i;printf(n 目前顺序表中有%d 个元素n, list-length);printf(这些元素分别是:n);for(i=0;ilength;i+) printf(%d ,list-datai); /依次打印输出顺序表中的元素printf(n);/在顺序表中查找值为 e 的元素,并返回它在表中的位置Int locate(SeqList *list, int e)int i=0;while(ilength & list-datai!=e) i+ ;

3、 /依次比较顺序表中各个元素if(ilength) return i+1; /找到元素的处理else printf(找不到元素!n,); /未找到元素的处理/在表中第 i 个元素之前插入新元素 einsert(SeqList *list, int i , int e)int j;if (ilist-length+1 ) /检查插入位置的合法性printf(插入位置非法!不能插入n!); else if (list-length=MAX) printf(表满,不能插入!n); /检查表空满情况else for(j=list-length-1;j=i-1;j-)list-dataj+1=list-

4、dataj; /从第 n 个元素开始到第 i 个元素依次向后移动一个位置list-datai-1=e; /新元素 e 插入 i 位置list-length+; /表长加 1/删除表中第 i 个元素delete(SeqList *list, int i)int j;if (ilist-length ) printf(删除位置非法!不能删除!n); /检查删除位置的合法性else if (list-length=0) printf(表空,不能删除!n); /检查表空满情况else for(j=i;jlength;j+)list-dataj-1=list-dataj; /从第 i 个元素开始到第 n

5、 个元素依次向前移动一个位置list-length-; /表长减 1单链表的基本运算实现以下算法都是带头结点的算法;假设表中数据元素的值为整数;/链表结点结构定义typedef struct nodeint data; /存放表结点值struct node *next; /存放表结点的直接后驱元素的地址 ListNode,*LinkList;/头插法创建初始链表LinkList create_h(int size)LinkList head,p;int i;head=(LinkList)malloc(sizeof(ListNode);/申请头结点的存储空间head-next=Null;/头结点

6、的 next 域为 Nullprintf(请输入这%d 个元素的值:n,size);for(i=0;idata);p-next=head-next;head-next=p;return head; /尾插法创建初始链表LinkList create_t(int size)LinkList head,p,r;int i;head=(LinkList)malloc(sizeof(ListNode); /申请头结点的存储空间head-next=Null; /头结点的 next 域为 Nullr=head;/尾指针指向头结点printf(请输入这%d 个元素的值:n,size);for(i=0;ida

7、ta);p-next=Null;r-next=p;r=p;/尾指针指向新增结点 return head; /求链表的长度int length(LinkList head)LinkList p;int i;p=head-next;/工作指针指向表中第一个结点i=0;/计数器置 0while(p!=Null)i+;/计数器计数p=p-next;/工作指针后移到下一个结点return i;/打印链表中的现有元素printList(LinkList head)LinkList p;p=head-next;/工作指针指向表中第一个结点while(p!=Null)printf(%d ,p-data);/打

8、印当前指针所指结点的值p=p-next;/工作指针后移到下一个结点/按位查找元素DataType get(LinkList head ,int i)LinkList p;int j;p=head-next; /工作指针指向表中第一个结点j=1; /计数器置 1while(p!=Null & jnext;j+;if(p!=Null /查找成功,p 指向第 i 个结点,返回第 i 个结点值else return Null;/i 值非法,查找失败/按值查找元素LinkList locate(LinkList head,int x)LinkList p;p=head-next;while(p!=Nul

9、l & p-data!=x)p=p-next;if (p!=Null & p-data=x)printf(找到该元素!”);return p;elseprintf(找不到该元素!n);return Null;/在链表中第 i 个元素前插入新元素insert(LinkList head,int i,int x)LinkList p,s;int j;p=head;/工作指针指向头结点,方便在第 1 个结点之前插入新元素j=0;/计数器置 0while(p!=Null & jnext;j+;if (p!=Null & j=i-1)/定位成功s=(LinkList)malloc(sizeof(List

10、Node);/申请新结点存储空间s-data=x;s-next=p-next;/新结点插入p-next=s;/新结点插入Else/插入位置非法printf(插入位置非法!n);/在链表中删除第 i 个结点元素delete(LinkList head,int i)LinkList p,q;int j;p=head; /工作指针指向头结点j=0; /计数器置 0while(p-next!=Null & jnext;j+;if(p-next!=Null & j=i-1)q=p-next;/q 指向要被删除的结点p-next=q-next;/删除结点free(q);/释放已被删除结点的存储空间elseprintf(空表或删除位置不合法!n);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号