首页 数据结构顺序表与单链表的建立

数据结构顺序表与单链表的建立

举报
开通vip

数据结构顺序表与单链表的建立数据结构顺序表与单链表的建立 封面: 安徽大学 网络工程 数据结构顺序表与单链表的建立 ——2012/4/7 一 实验目的 1(熟练掌握线性表的基本操作在顺序存储和链式 存储上的实现。 2(以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点。 3(通过本章实验加深对c语言的使用(特别是函数的参数调用、指针类型的应用 和链表的建立等各种基本操作)。 二 实验内容 1. 顺序表的基本操作的实现.包括: (1).顺序表的类型定义; (2).创建一个元素为1,10,9,5的顺序表; (3...

数据结构顺序表与单链表的建立
数据结构顺序 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 与单链表的建立 封面: 安徽大学 网络工程 数据结构顺序表与单链表的建立 ——2012/4/7 一 实验目的 1(熟练掌握线性表的基本操作在顺序存储和链式 存储上的实现。 2(以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点。 3(通过本章实验加深对c语言的使用(特别是函数的参数调用、指针类型的应用 和链表的建立等各种基本操作)。 二 实验内容 1. 顺序表的基本操作的实现.包括: (1).顺序表的类型定义; (2).创建一个元素为1,10,9,5的顺序表; (3) .向(2)中表的指定位置插入一个元素; (4).删除(3)中顺序表中指定位置的元素; (5).依次输出(2)~(4)顺序表中的元素. 2. 链表的基本操作的实现.包括: (1).链表的类型定义; (2).创建一个元素为5,-4,9,10,3的链表; (3) .向(2)表中指定位置插入一个元素; (4).删除(3)表中指定位置的元素; (5).依次输出(2)~(4)表中的元素. 三、实验步骤 1(本实验用到的数据结构 (1)逻辑结构:线性结构 (2)存储结构;顺序存储结构,链式存储结构 2(各程序的功能和算法设计思想 程序一 // 数据结构实验.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include # define OK 1 # define ERROR 0 # define OVERFLOW -2 # define LISTINITSIZE 100 # define LISTINCREMENT 10 typedef int status; typedef struct { int * elem; int length; int listsize; }sqlist; void Initlist (sqlist *l) { (*l).elem= (int*)malloc(LISTINITSIZE * sizeof(int)); if(!(*l).elem) exit (OVERFLOW); (*l).length=0; (*l).listsize=LISTINITSIZE; } status ListInsert (sqlist *l, int i, int h) { int *newbase,*q,*p; if (i<1|| i>(*l).length+1) { printf("插入位置不合法~\n"); return ERROR; } if ((*l).length>= (*l).listsize) { newbase = (int *)realloc((*l).elem , ((*l).listsize + LISTINCREMENT) * sizeof(int)); if (! newbase) exit (OVERFLOW); (*l).elem = newbase; (*l).listsize+=LISTINCREMENT; } q =(*l).elem + i-1; for (p=(*l).elem + (*l).length-1;p>=q;--p) { *(p+1)=*p; } *q=h; ++(*l).length; return OK; } status Getelem(sqlist l, int i,int *e) { if (i<1||(i>l.length)) { printf("输入位置不合法~\n"); return ERROR; } *e= *(l.elem +i-1); printf("第%d个元素的值是:%d\n",i,*e); printf("\n"); return OK; } status ListDelete(sqlist *l, int i) { int *p,*q; if (i<1||i>((*l).length)) { printf("删除元素位置不合法~\n"); return ERROR; } p = (*l).elem+i-1; printf("删除第%d个元素%d\n",i,*p); q= (*l).elem+ (*l).length-1; for (++p;p<=q;++p) *(p-1)=*p; (*l).length--; return OK; } void ListTraverse(sqlist l) { int *p; int i ; p= l.elem; for ( i=1; i<=l.length; i++) printf("%d\n",*p++); printf("\n"); } void main() { int n,i,j,k,e,h,m=1; sqlist la; Initlist(&la); printf("请输入顺序表的长度n\n"); scanf ("%d",&n); printf("请输入%d个数据\n",n); for (j =1;j<=n;j++) { scanf("%d",&e); ListInsert(&la,j,e); } printf("输出各元素\n"); printf ("la="); ListTraverse(la); fflush(stdin); printf("\n"); printf ("请依次输入插入元素的位置i,插入元素的值h\n"); scanf("%d",&i); scanf("%d",&h); printf("在第%d个元素前面插入元素%d\n",i,h); ListInsert(&la,i,h); printf("输出各元素\n"); printf("la="); ListTraverse(la); fflush(stdin); printf("\n"); while(m) { printf ("请输入查找元素的位置k\n"); scanf ("%d",&k); if (Getelem(la,k,&e)) m=0; fflush(stdin); } printf("请输入删除元素的位置\n"); scanf ("j=%d",&j); printf ("删除的第%d各元素是\n",j); ListDelete(&la,j); printf("la="); ListTraverse(la); printf("\n"); } 功能:建立一个线性顺序结构,能够实现初始化顺序 表,查找元素,插入元素,删除元素和输出顺序表等。 算法设计思想:单独建立具有初始化,插入,删 除,查找,输出功能的函数,其后按照合理的顺序构 建一个主函数。 调试情况如下: 输入,输出要求 输入数据: 数据类型:有符号整型((signed) int ) 值域范围:-32768~32767 程序二// shuju2.cpp : 定义控制台应用程序的入口点。 // // shuju2.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include # define OK 1 # define ERROR 0 typedef int status; typedef struct LNode{ int data; struct LNode *next; }Lnode,*Linklist; void Createlist(Linklist *l,int n){ int i; Linklist p; *l=(Linklist) malloc(sizeof(Lnode)); (*l)->next=NULL; printf("请输入%d个元素\n",n); for(i=n;i>0;--i){ p=(Linklist) malloc(sizeof(Lnode)); scanf("%d",&(p->data)); p->next=(*l)->next; (*l)->next=p; } } status Getelem(Linklist *l,int i, int *e){ int j=1; Linklist p; p=(*l)->next; while (p && jnext; ++j; } if(!p||j>i){ printf("第%d个元素不存在\n",i); return ERROR; } *e=p->data; printf("第%d个元素是%d\n",i,*e); return OK; } status Listinsert(Linklist l,int i,int e){ int j=0; Linklist p,s; p=l; while(p&&jnext; ++j; } if(!p||j>i-1) { printf("插入位置不合法\n"); return ERROR; } s=(Linklist) malloc (sizeof(Lnode)); s->data = e; s->next=p->next; p->next=s; return OK; } status ListDelete(Linklist l,int i){ int j=0,h; Linklist p,q; p=l; while(p->next&& jnext; ++j; } if (!(p->next)||j>i-1) { printf("删除位置不合法\n"); return ERROR; } q=p->next; p->next=q->next; h=q->data; printf("删除的元素是%d",h); free(q); return OK; } void ListTraverse(Linklist l){ Linklist p; p=l->next; while(p){ printf("%d ",p->data); p=p->next; } } void main (){ int i,j,n,k,e,m=1; Linklist la; printf("请输入单链表的长度\n"); scanf("%d",&n); printf("逆位序建表\n"); Createlist(&la,n); printf("输出各元素\n"); printf("la="); ListTraverse(la); fflush(stdin); printf("\n"); while(m){ printf("请输入查找元素的位置k\n"); scanf("%d",&k); if(Getelem(&la,k,&e)) m=0; fflush(stdin); printf("\n"); } m=1; while(m){ printf("请输入要插入元素的位置i及数值e\n"); scanf("%d",&i); scanf("%d",&e); if(Listinsert(la,i,e)) m=0; "输出各元素\n"); printf( printf("la="); ListTraverse(la); fflush(stdin); printf("\n"); } m=1; while(m){ printf("请输入删除元素的位置j\n"); scanf("%d",&j); if(ListDelete(la,j)) m=0; printf("输出各元素\n"); printf("la="); ListTraverse(la); printf("\n"); } } 功能:建立一个单链表,能够实现初始化单链表,查 询,删除,插入以及输出个功能。 算法设计思想:利用逆序的方法构建一个Createlist 子函数,再分别建立具‎‎有插入,查询,删除,输出功 能的子函数,最后建立一个main函数按一定顺序调‎‎用各个子函数,实现程序设计。 调试情况如下: 输入,输出要求 输出数据: 数据类型:有符号整型((signed) int ) 值域范围:-32768~32767 实验 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf : (1) 实验时碰到过函数指针调用错误,以及 结构体类数据调用错误,如将(*L)的 形式写成L。缺乏部分数据类型定义也常 遇等…… (2) 通过本次实验,加深了对函数指针调用 和结构体内部成员调用的认识,进一步 熟悉了构建顺序表,单链表和删除,查 询,插入元素等方法。 (3) 实验前应该编号基本的程序,尽量熟悉。
本文档为【数据结构顺序表与单链表的建立】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_686908
暂无简介~
格式:doc
大小:61KB
软件:Word
页数:16
分类:企业经营
上传时间:2017-09-28
浏览量:84