数据结构_实验报告1顺序表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、抄写自己所选择的题目。
1、已知一顺序表A,其元素非递减有序排列,编写一个算法,删除顺序表中值相同多余的元素(相同值保留一个)。
2、已知带头结点的单链表L中的节点是按整数值递增排序的,试写一算法,将值为x的节点插入到表L中,使得表L仍然有序。分析算法的时间复杂度。
二、写出算法设计思路。
1.建立一个顺序表用于存储一组非递减排序的整形数据,对顺序表中的每个元素与其下一个元素进行比较操作。用指针记录当前所比较的元素,如果相等则对当前指针所指向的元素进行删除操作,并将它后面的数据前移,再与下一个元素比较,如果还相等就继续删除操作,否则指向下个元素,再比较直至无重复的元素。
2. 建立一个带头节点的单链表,其节点按整数值递增排序。创建一个新的节点,并由键盘输入节点的值。将其与链表中原有的节点(头节点不参与比较)按顺序作比较,并用指针指向当前的位置,若不大于当前节点,则在当前位置这前作插入操作,否则在最后作插入操作。
三、编写代码,调试运行,实现题目要求(提示:考虑到插入和删除的位置是否超出范围等可能出现的异常问题)。解1.法I:
#include "stdio.h"
#include "conio.h"
#define SIZE 10
main()
{ int SqList_A[SIZE]={23,3,45,65,23,44,5,7,89,0};
int i,j,n,m,l=SIZE;
for(i=0;i printf("\nThe new one is:\n"); for(i=0;i<(l-1);i++) for(j=0;j<(l-1);j++) if(SqList_A[i]==SqList_A[j]) if(i!=j) {n=i;m=i+1; for(;m SqList_A[n]=SqList_A[m]; l=l-1; } for(i=0;i getch(); } 法II: #include "stdio.h" #include "conio.h" #define SIZE 18 #define ERROR 0 #define OK 1 int length; /* 定义宏观变量*/ typedef int status; typedef struct{ int *elem; int length; int listsize;} SqList; status ListDelete(SqList *L) { /*删除顺序表L中值相同多余的元素(相同值保留一个)*/ int i=0,j,n=0; SqList *p=L; if(!p) return ERROR; while(i {if(*(p->elem+i)==*(p->elem+i+1)) {/*删除相同多余的元素*/ for(j=i;j n++; p->length--;} if(!(*(p->elem+i)==*(p->elem+i+1))) /*判断第i个数是否任和下一个数相同*/ i++;} length=SIZE-n; return n;} main() {int a[SIZE]={1,2,2,5,6,7,7,12,13,13,13,18,19,20,21,24,24,39},t; int n,m; SqList A; A.elem=a; for(n=0;n printf("%d ",a[n]); A.length=A.listsize=SIZE; t=ListDelete(&A) ; if(!t)printf("ListDelete ERROR!\n"); else { printf("\nThe new one is:\n"); for(n=0;n printf("%d ",a[n]);} getch(); } 解2. #include "stdio.h" #include "conio.h" #define SIZE 10 #define ERROR 0 #define NULL 0 #define OK 1 int a[SIZE]={1,3,5,8,10,12,14,17,19,26},i; typedef int status; typedef struct nod{ int data; struct nod *next;} node; status CreatList(node *L) {/*建立一个带头结点的节点按整数值递增排序的单链表L*/ node *p,*h=NULL; h=p=(node *)malloc(sizeof(node)); if(!p) return ERROR; /*节点创建失败*/ p->data=a[i]; for(i=1;i {p->next=(node *)malloc(sizeof(node)); p=p->next; p->data=a[i];} p->next=NULL; L->next=h; return OK;} status ListInsert(node *L,int x) {int i,k;