- 0
- 0
- 约1.1万字
- 约 60页
- 2019-09-06 发布于广东
- 举报
* 北京联合大学信息学院 2.单链表上的基本操作 (a) 插入前 图2.8 单链表的前插入 q p s a1 a2 head ai an ^ … … x ai-1 p q (a) 插入后 p p s a1 a2 head ai an ^ … … x ai-1 p * 北京联合大学信息学院 2.单链表上的基本操作 { q=head; while(q-next!=p) q=q-next; s=(LinkList *)malloc(sizeof(linklist)); s-data=x; s-next=p; q-next=s; } * 北京联合大学信息学院 2.单链表上的基本操作 单链表的前插入算法 int insert(LinkList *h,int i,datatype x) {/*在链表h中,在第i个数据元素插入一个数据元素x */ LinkList *p,*q,*s; int j=0; p=h; while(p!=NULLji-1) { p=q-next; j++; } /*寻找第i-1个结点*/ if ( j!=i-1) {printf(“Error!”); return FALSE; /*插入位置错误*/} if ((s=(LinkList *)malloc(sizeof(LinkList)))==NULL) return FALSE; s-data=x; s-next=p-next; q-next=s; return TRUE;} * 北京联合大学信息学院 2.单链表上的基本操作 例:下面C程序中的功能是,首先建立一个线性链表head={3,5,7,9},其元素值依次为从键盘输入正整数(以输入一个非正整数为结束);在线性表中值为x的元素前插入一个值为y的数据元素。若值为x的结点不存在,则将y插在表尾。 #include “stdlib.h” #include “stdio.h” struct LinkList { datatype data; struct LinkList *next; } /*定义结点类型*/ main() { int x,y,d; struct linklist *head,*p,*q,*s; head=NULL; /*置链表空*/ q=NULL; scanf(“%d”,d); /*输入链表数据元素*/ while(d0) * 北京联合大学信息学院 2.单链表上的基本操作 {p=malloc(sizeof(struct linklist)); /*申请一个新结点*/ p-data=d; p-next=NULL; if(head==NULL) head=p; /*若链表为空,则将头指针指向当前结点p*/ else q-next=p; /*链表不为空时,则将新结点链接在最后*/ q=p; /*将指针q指向链表的最后一个结点*/ scanf(“%d”,d);} scanf(“%d,%d”,x,y); s=malloc(sizeof(struct linklist)); s-data=y; q=head;p=q-next; while((p!=NULL)(p-data!=x)) {q=p;p=p-next;} /*查找元素为x的指针*/ s-next=p;q-next=s; /*插入元素y*/ } * 北京联合大学信息学院 2.单链表上的基本操作 3.单链表的删除操作 若要删除线性链表h中的第i个结点,首先要找到第i个结点并使指针p 指向其前驱第i-1个结点,然后删除第i个结点并释放被删除结点空间 。操作过程如图2.9所示。 ai ai-1
原创力文档

文档评论(0)