文档详情

数据结构实验二:单链表的基本操作

碎****木
实名认证
店铺
DOCX
13.82KB
约12页
文档ID:288893509
数据结构实验二:单链表的基本操作_第1页
1/12

实验二:单链表的基本操作一、【实验目的】1、理解和掌握单链表的类型定义方法和结点生成方法2、掌握建立单链表和显示单链表元素的算法3、掌握单链表的查找、插入和删除算法二、【实验内容】1、建立一个整形数的单链表,手动输入 10 个数,并从屏幕显示单链表元素列表2、从键盘输入一个数,查找在以上创建的单链表中是否存在该数;如果存在,显示它的位置;如果不存在,给出相应提示3、删除上述单链表中指定位置的元素以下是程序部分代码,请调试并补充使之正确运行:1.LinList.htypedef struct Node{DataType data; struct Node *next;} SLNode;void ListInitiate(SLNode **head) /*初始化*/{/*如果有内存空间,申请头结点空间并使头指针 head 指向头结点*/ if((*head = (SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1); (*head)->next = NULL; /*置链尾标记 NULL */}int ListLength(SLNode *head){SLNode *p = head; /*p 指向首元结点*/ int size = 0; /*size 初始为 0*/while(p->next != NULL) /*循环计数*/{p = p->next; size ++;}return size;}int ListInsert(SLNode *head, int i, DataType x)/*在带头结点的单链表 head 的数据元素 ai(0 ≤ i ≤ size)结点前*//*插入一个存放数据元素 x 的结点*/{SLNode *p, *q; int j;p = head; /*p 指向首元结点*/j = -1; /*j 初始为-1*/while(p->next != NULL && j < i - 1)/*最终让指针 p 指向数据元素 ai-1 结点*/{p = p->next; j++;}if(j != i - 1){printf("插入位置参数错!"); return 0;}/*生成新结点由指针 q 指示*/if((q = (SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1); q->data = x;q->next = p->next; /*给指针 q->next 赋值*/ p->next = q; /*给指针 p->next 重新赋值*/ return 1;}int ListDelete(SLNode *head, int i, DataType *x)/*删除带头结点的单链表 head 的数据元素 ai(0 ≤ i ≤ size - 1)结点*//*删除结点的数据元素域值由 x 带回。

删除成功时返回 1;失败返回 0*/{SLNode *p, *s; int j;p = head; /*p 指向首元结点*/j = -1; /*j 初始为-1*/while(p->next != NULL && p->next->next!= NULL && j < i - 1)/*最终让指针 p 指向数据元素 ai-1 结点*/{p = p->next;j++;}if(j != i - 1){printf("插入位置参数错!"); return 0;}s = p->next; /*指针 s 指向数据元素 ai 结点*/*x = s->data; /*把指针s 所指结点的数据元素域值赋予x*/ p->next = s->next; /*把数据元素 ai 结点从单链表中删除指*/free(s); /*释放指针 s 所指结点的内存空间*/ return 1;}int ListGet(SLNode *head, int i, DataType *x)/*取数据元素 ai 和删除函数类同,只是不删除数据元素 ai 结点*/{SLNode *p; int j;p = head; j = -1;while(p->next != NULL && j < i){p = p->next; j++;}if(j != i){printf("取元素位置参数错!"); return 0;}*x = p->data; return 1;}void Destroy(SLNode **head){SLNode *p, *p1;p = *head; while(p != NULL){p1 = p;p = p->next; free(p1);}*head = NULL;}2. main 程序#include #include #include #include "LinList.h" void main(void){/*该文件包含 pringtf()等函数*//*该文件包含 exit()等函数*//*该文件包含 malloc()等函数*//*包含线性表文件*/SLNode *head; int i , x;ListInitiate(&head); for(i = 0; i < 10; i++){/*初始化*/if(ListInsert(head, i, i+1) == 0){/*插入 10 个数据元素*/printf("错误! \n"); return;}}}三、【实验源代码】 1.执行代码: #include #include #include #include "LinList.h"void main(void){SLNode *head; int i,x,t;ListInitiate(&head); printf("请输入 10 个数"); for(i = 0; i < 10; i++){scanf("%d",&t); if(ListInsert(head, i, t) == 0){printf("错误! \n"); return;}}printf("请输入要查找的数字.\n"); scanf("%d",&t);ListFind(head, t);printf("请输入要删除的数字.\n"); scanf("%d",&t); if(ListDelete(head,&t)==1)printf("删除成功!\n"); elseprintf("错误!\n"); ListOutput(head);}2.头文件typedef struct Node{int data;struct Node *next;} SLNode;void ListInitiate(SLNode **head){/*初始化*//*如果有内存空间,申请头结点空间并使头指针 head 指向头结点*/ if((*head = (SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1); (*head)->next = NULL; /*置链尾标记 NULL */}int ListLength(SLNode *head){SLNode *p = head; int size = 0;/*p 指向首元结点*//*size 初始为 0*/while(p->next != NULL){/*循环计数*/p = p->next; size ++;}return size;}int ListInsert(SLNode *head, int i, int x)/*在带头结点的单链表 head 的数据元素 ai(0 ≤ i ≤ size)结点前*//*插入一个存放数据元素 x 的结点*/{SLNode *p, *q; int j;p = head; j = -1;/*p 指向首元结点*//*j 初始为-1*/while(p->next != NULL && j < i - 1)/*最终让指针 p 指向数据元素 ai-1 结点*/{p = p->next; j++;}if(j != i - 1){printf("插入位置参数错!");return 0;}/*生成新结点由指针 q 指示*/if((q = (SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1); q->data = x;q->next = p->next; p->next = q; return 1;/*给指针 q->next 赋值*//*给指针 p->next 重新赋值*/}int ListDelete(SLNode *head, int *x)/*删除带头结点的单链表 head 的数据元素 ai(0 ≤ i ≤ size - 1)结点*//*删除结点的数据元素域值由 x 带回。

删除成功时返回 1;失败返回 0*/{SLNode *p, *s; int j;p = head; j = -1;/*p 指向首元结点*//*j 初始为-1*/while(p->next != NULL && p->next->next!= NULL && p->next->data !=*x)/*最终让指针 p 指向数据元素 ai-1 结点*/{p = p->next;j++;}// if(j != i - 1)// {////// }printf("插入位置参数错!"); return 0;s = p->next;*x = s->data;/*指针 s 指向数据元素 ai 结点*//*把指针 s 所指结点的数据元素域值赋予x*/p->next = s->next; free(s);return 1;/*把数据元素 ai 结点从单链表中删除指*//*释放指针 s 所指结点的内存空间*/}int ListGet(SLNode *head, int i, int *x)/*取数据元素 ai 和删除函数类同,只是不删除数据元素 ai 结点*/{SLNode *p; int j;p = head; j = -1;。

下载提示
相似文档
正为您匹配相似的精品文档