数据结构顺序
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易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) 实验前应该编号基本的程序,尽量熟悉。