请教会C语言的高人线性顺序表问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教会C语言的高人线性顺序表问题相关的知识,希望对你有一定的参考价值。
参考技术A 分类: 电脑/网络 >> 程序设计 >> 其他编程语言问题描述:
实验一 线性顺序表的插入与删除(6课时)-教材实验1
一、实验目的:
学习线性顺序表的建立与各个操作以及编程语言的熟练掌握。学习上机调试程序过程中各种问题的解决。
二、实验内容:
(一)线性顺序表1:是为了首先熟练一下编程语言的运用而设计的,需要同学对数组这种常用的线性表的各种操作熟练地用各个功能块来实现。在这里希望用函数调用方式实现建立线性表及线性表的各项功能。线性表的结构用一个结构体来描述:
Struct List
ET alist[MaxSize];
int size;
;一旦定义一个struct List这样的数据结构名称与类型,那么在你的程序里,struct List就象int 一样的意义了
可以用typedef char ET来定义一个宏,用ET代表数据类型char ,这样若要改变数据类型,只需改动这一个地方就可以了。
实现七个函数:
1)置空表:void setnull(struct List *p)
2) 求长度:int length(struct List *p)
3)取表中第i个结点:ET get (struct List *p,int i)
4)按值查找:int locate(struct List *p,ET x)
5)插入结点:void insert(struct List *p,int i,ET x)
6)删除结点:void delete(struct List *p,int i)
7)显示链表:void display(struct List *p)
这样可以直接调用这七个函数来实现顺序表的操作,如实现在屏幕上显示如下内容:(就是说,每个动作都应该在屏幕上有提示)
我的顺序表为:d-> e->a->c->a->b
值为a在表中的位置为:3
位置4的值为:c
删除第二个结点后顺序表:d-> a->c->a->b
删除第二个结点后顺序表:d-> c->a->b
删除第1个结点后顺序表: c->a->b
删除第1个结点后顺序表: a->b
(二)线性顺序表2:
实现教材上的实验1-线性顺序表的插入与删除
实验目的:掌握线性表在顺序分配下的各种运算,并掌握一种产生随机数的方法。
实验内容:产生N*1024个随机整数,依次存入一个数据文件中。定义一个有序线性表,其最大容量为N*1024,初始为空;从数据文件中依此取出M个随机整数,陆续插入到此线性表中,并保持线性表的有序性。
M=100或M=400时分别运行程序,比较程序运行时间。
建立数组,产生随机数方法:
void RandomNum()
int i;
srand((int)time( NULL ));
for(i=0; i<MAXSIZE; i++)
RandArray[i]=(int)rand();
return;
srand ()和rand()函数的原型在stdlib.h
rand()%1000;产生1000以内的随机数。
time()函数包含在time.h里,C语言里,所有的变量、函数都要先定义,后使用,每使用一个变量,事先你要定义它是什么类型的数据;int i,j,m,n; 函数也是一样的,如printf(),我们经常要用它,而它为库函数,这时,你还是要将它的库包含进来#include <stdio.h>,这样程序在编译连接时才能找到他的prototype,否则要给出出错信息。若是我们自己定义的函数,那么也要在main()之前定义,哪怕是先申明。
在TC里,如何比较程序运行时间?
# include "time.h"
clock_t start,end;
start=clock();
程序段;
end=clock();
time=end-start;
文件的读写:
FILE* f;
int i;
if((f=fopen("SortRes.txt","w"))==NULL)
printf("can't open file\n");
exit(0);
for (i=0; i<L->Length; i++)
fprintf(f,"%d\n",L->Record[i].num);
fclose (f);
解析:
你这个问题比较麻烦呀,难度倒没有什么?本来想替你做的,但没有时间啊,我们课程太重了,自己天天还要上自习,也够累的了.要不你自己先写着看吧,如果有问题我们在交流.再说如果别人给你做了,你就学不到什么知识了,是吧.呵呵,百度是用来解决问题的,不是替人做题目的.对吧.
祝你成功哦
C语言数据结构——线性表的顺序表示
线性表的定义(线性表包含顺序表示和链式表示)
线性表是一种由n(n≥0)个相同类型数据元素a0, a1,…, an-1组成的线性结构。可以在任意位置插入和删除数据元素操作;
一、顺序表(线性表的顺序表示)
顺序存储结构的线性表称作顺序表(Sequence List)。
顺序表的存储结构
实现顺序存储结构的方法是使用数组。数组把线性表的数据元素存储在一块连续地址空间的内存单元中,这样线性表中逻辑上相邻的数据元素在物理存储地址上也相邻。数据元素间的逻辑上的前驱、后继逻辑关系就表现在数据元素的存储单元的物理前后位置上。
顺序表的实现
//顺序表的结构体
typedef struct
{
DataType list[MaxSize]; //list表示顺序表存储数据元素的数组,MaxSize表示存储顺序表的数组的最大存储单元个数,
int size; //size表示顺序表当前存储的数据元素个数。
} SeqList;
//(1)初始化
void ListInitiate(SeqList *L)
{
L->size= 0; /*定义初始数据元素个数*
}
//(2)求当前数据元素的个数
int ListLength(SeqList L)
{
return L.size;
}
//(3)插入数据元素
//在顺序表L的第i(0≤i ≤ length)个位置前插入数据元素x
//插入成功返回1,失败返回0
int ListInsert(SeqList *L, int i, DataType x)
{
int j;
if(L-> size >=MaxSize)
{
printf(“顺序表已满无法插入!\\n”);
return 0;
}
else if(i<0||i>L-> size )
{
printf(“参数i不合法!\\n”);
return 0;
}
else {
for(j = L-> size; j > i; j--){
L->list[j] = L->list[j-1]; /*依次后移*/
}
L->list[i] = x; /*插入x*/
L->size ++; /*元素个数加1*/
return 1;
}
}
//(4)删除数据元素
//删除顺序表L中位置i(0≤i ≤ length-1)上的数据元素并保存到x中
//删除成功返回1,删除失败返回0
int ListDelete(SeqList *L, int i, DataType *x)
{
int j;
if(L-> size <=0)
{
printf("顺序表已空无数据元素可删!\\n");
return 0;
}
else if(i<0||i>L-> size -1)
{
printf("参数i不合法!\\n");
return 0;
} else
{
*x = L->list[i]; /*保存删除的元素到x中*/
for(j = i +1; j <= L->size-1; j++){
L->list[j-1] = L->list[j]; /*依次前移*/
}
L-> size --; /*数据元素个数减1*/
return 1;
}
}
//(5)取数据元素
int ListGet(SeqList L, int i, DataType *x)
{
if(i < 0 || i > L. size -1)
{
printf("参数i不合法! \\n");
return 0;
}
else
{
*x = L.list[i];
return 1;
}
}
//main函数测试
void main(void)
{
SeqList myList;
int i , x;
ListInitiate(&myList);
for(i = 0; i < 10; i++){
ListInsert(&myList, i, i+1);
}
ListDelete(&myList, 4, &x);
for(i = 0; i < ListLength(myList); i++){
ListGet(myList, i, &x);
printf("%d ", x); //myList.list[i]
}
}
程序运行结果:
1 2 3 4 6 7 8 9 10
以上是关于请教会C语言的高人线性顺序表问题的主要内容,如果未能解决你的问题,请参考以下文章