如何用线性表储存五个数字并输出
代码如下:
#include
#define MAXSIZE 20
#define OK 1
#define ERROR 0
#define FALSE 0
#define TRUE 1
typedef int Status;
typedef int Elemtype;
typedef struct SqList
{
Elemtype data[MAXSIZE];
int length;
}SqList;
Status InitList(SqList *L){
L->length = 0;
return OK;
}
Status InsertElem(SqList *L, int i, Elemtype e)
{
int k;
if (L->length == MAXSIZE)
return FALSE;
if (i L->length + 1)
{
return FALSE;
}
if (i length)
{
for (k = L->length; k >= i; k--)
{
L->data[k] = L->data[k - 1];
}
}
L->data[i - 1] = e;
L->length++;
return OK;
}
Status DeletElem(SqList *L, int i, Elemtype *e)
{
int k;
if (i L->length)
return ERROR;
*e = L->data[i - 1];
if (i length)
{
for (k = i; k length; k++)
L->data[k - 1] = L->data[k];
}
L->length--;
return OK;
}
void visit(SqList L)
{
int i;
for (i = 0; i < L.length; i++)
{
printf("%d ", L.data[i]);
}
printf("
");
}
int main()
{
SqList L;
InitList(&L);
Elemtype e = 0;
for(int i=0;i<5;i++){
printf("请输入任意整数:");
scanf("%d",&e);
InsertElem(&L,i+1,e);
}
printf("顺序表数据为:");
visit(L);
DeletElem(&L,3,&e);
printf("删除第3个元素后,顺序表数据为:");
visit(L);
return 0;
}
测试:
望采纳
大佬,代码还在吗?求代码
这属于数据结构题。
参考例子:
线性表的链式存储与基本操作
利用线性表的链式存储结构,设计一组输入数据(假定为一组整数),能够对单链表进行如下操作:
初始化一个带表头结点的空链表;
创建一个单链表是从无到有地建立起一个链表,即一个一个地输入各结点数据,并建立起前后相互链接的关系。又分为逆位序(插在表头)输入n个元素的值和正位序(插在表尾)输入n个元素的值;
插入结点可以根据给定位置进行插入(位置插入),也可以根据结点的值插入到已知的链表中(值插入),且保持结点的数据按原来的递增次序排列,形成有序链表;
删除结点可以根据给定位置进行删除(位置删除),也可以把链表中查找结点的值为搜索对象的结点全部删除(值删除);
输出单链表的内容是将链表中各结点的数据依次显示,直到链表尾结点;
编写主程序,实现对各不同的算法调用。其它的操作算法描述略。
pubuse.h是公共使用的常量定义和系统函数调用声明
#include<string.h>
#include<ctype.h>
#include<malloc.h>/*malloc()等*/
#include<limits.h>/*INT_MAX等*/
#include<stdio.h>/*EOF(=^Z或F6),NULL*/
#include<stdlib.h>/*atoi()*/
#include<io.h>/*eof()*/
#include<math.h>/*floor(),ceil(),abs()*/
#include<process.h>/*exit()*/
/*函数结果状态代码*/
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
/*#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此行*/
typedef int Status;/*Status是函数的类型,其值是函数结果状态代码,如OK等*/
typedef int Boolean;/*Boolean是布尔类型,其值是TRUE或FALSE*/
文件linklistDef.h是线性表的单链表存储结构的定义
struct LNode{
ElemType data;
struct LNode *next;
};
typedef struct LNode *LinkList;/*另一种定义LinkList的方法*/
文件linklistAlgo.h是单链表的基本算法描述
对链表的各项操作一定要编写成为C(C++)语言函数,组合成模块化的形式,还要针对每个算法的实现从时间复杂度和空间复杂度上进行评价。
“初始化算法”的操作结果:构造一个空的线性表L,产生头结点,并使L指向此头结点;.
建立链表算法”初始条件:空链存在;
操作结果:选择逆位序或正位序的方法,建立一个单链表,并且返回完成的结果;
“链表(位置)插入算法”初始条件:已知单链表L存在;
操作结果:在带头结点的单链线性表L中第i个位置之前插入元素e;
“链表(位置)删除算法”初始条件:已知单链表L存在;
操作结果:在带头结点的单链线性表L中,删除第i个元素,并由e返回其值;
“输出算法”初始条件:链表L已存在;
操作结果:依次输出链表的各个结点的值;
/*以下的算法均是针对带表头结点的单链表*/
Status ListInit_Link(LinkList &L)
{ /*操作结果:构造一个空的线性表L*/
L=(LinkList)malloc(sizeof(struct LNode));/*产生头结点,并使L指向此头结点*/
if(!L)/*存储分配失败*/exit(OVERFLOW);
L->next=NULL;/*指针域为空*/
return OK;
}
Status ListDestroy_Link(LinkList L){/*初始条件:线性表L已存在。*//*操作结果:销毁线性表L*/
LinkList q;
while(L){
q=L->next;free(L);L=q;
}
return OK;
}
Status ListClear_Link(LinkList L)/*不改变L*/
{/*初始条件:线性表L已存在。*/
/*操作结果:将L重置为空表*/
LinkList p,q;
p=L->next;/*p指向第一个结点*/
while(p)/*没到表尾*/
{
q=p->next;free(p);p=q;
}
L->next=NULL;/*头结点指针域为空*/
return OK;
}
Status ListEmpty_Link(LinkList L){/*初始条件:线性表L已存在。*/
/*操作结果:若L为空表,则返回TRUE,否则返回FALSE*/
if(L->next)/*非空*/
return FALSE;
else
return TRUE;
}
int ListLength_Link(LinkList L){
/*初始条件:线性表L已存在。*/
/*操作结果:返回L中数据元素个数*/
int i=0;
LinkList p=L->next;/*p指向第一个结点*/
while(p)/*没到表尾*/
{i++;p=p->next;}
return i;
}
Status GetElem_Link(LinkList L,int i,ElemType &e)/*算法2.8*/
{/*初始条件:L为带头结点的单链表的头指针*/
/*操作结果:当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR*/
int j=1;/*j为计数器*/
LinkList p=L->next;/*p指向第一个结点*/
while(p&&j<i)/*顺指针向后查找,直到p指向第i个元素或p为空*/
{
p=p->next;j++;
}
if(!p||j>i)
/*第i个元素不存在*/
return ERROR;
e=p->data;/*取第i个元素*/
return OK;
}
int LocateElem_Link(LinkList L,ElemType e,Status(*compare)(ElemType,ElemType))
{ /*初始条件:线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0)*/
/*操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。*/
/*若这样的数据元素不存在,则返回值为0*/
int i=0;
LinkList p=L->next;
while(p){i++;
if(compare(p->data,e))/*找到这样的数据元素*/
return i;
p=p->next;
}
return 0;
}
Status ListInsert_Link(LinkList L,int i,ElemType e)/*算法2.9,不改变L*/
{/*在带头结点的单链线性表L中第i个位置之前插入元素e*/
int j=0;LinkList p=L,s;
while(p&&j<i-1)/*寻找第i-1个结点*/
{
p=p->next;j++;
}
if(!p||j>i-1)/*i小于1或者大于表长*/
return ERROR;
s=(LinkList)malloc(sizeof(struct LNode));/*生成新结点*/
s->data=e;/*插入L中*/
s->next=p->next;p->next=s;
return OK;
}
Status ListDelete_Link(LinkList L,int i,ElemType &e)
/*算法2.10,不改变L*/
{/*在带头结点的单链线性表L中,删除第i个元素,并由e返回其值*/
int j=0;LinkList p=L,q;
while(p->next&&j<i-1)/*寻找第i个结点,并令p指向其前趋*/
{
p=p->next;j++;}
if(!p->next||j>i-1)/*删除位置不合理*/
return ERROR;
q=p->next;/*删除并释放结点*/
p->next=q->next;e=q->data;free(q);
return OK;
}
Status ListTraverse_Link(LinkList L){/*初始条件:线性表L已存在*/
/*操作结果:依次对L的每个数据元素的值进行输出*/
LinkList p=L->next;
while(p){
printf(" %d ",p->data);p=p->next;
}
printf("
");
return OK;
}
void CreateList_Link(LinkList &L,int n)/*算法2.11*/
{/*逆位序(插在表头)输入n个元素的值,建立带表头结构的单链线性表L*/
int i;LinkList p;
L=(LinkList)malloc(sizeof(struct LNode));
L->next=NULL;/*先建立一个带头结点的单链表*/
printf("请输入%d个数据
",n);
for(i=n;i>0;--i){
p=(LinkList)malloc(sizeof(struct LNode));/*生成新结点*/
scanf("%d",&p->data);/*输入元素值*/
p->next=L->next;/*插入到表头*/
L->next=p;
}
}
void CreateList2_Link(LinkList &L,int n)
{/*正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表*/
int i;LinkList p,q;
L=(LinkList)malloc(sizeof(struct LNode));/*生成头结点*/
L->next=NULL;q=L;
printf("请输入%d个数据
",n);
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(struct LNode));
scanf("%d",&p->data);q->next=p;q=q->next;
}
p->next=NULL;
}
StatusPriorElem_Link(LinkList L,ElemType cur_e,ElemType &pre_e)/*为扩展实验的内容*/
{/*初始条件:线性表L已存在*/
/*操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,*//*
返回OK;否则操作失败,pre_e无定义,返回INFEASIBLE*/
LinkList q,p=L->next;/*p指向第一个结点*/
while(p->next)/*p所指结点有后继*/
{
q=p->next;/*q为p的后继*/
if(q->data==cur_e){
pre_e=p->data;
return OK;
}
p=q;/*p向后移*/}
return INFEASIBLE;
}
Status NextElem_Link(LinkList L,ElemType cur_e,ElemType &next_e)/*为扩展实验的内容*/
{/*初始条件:线性表L已存在*/
/*操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,*/
/*返回OK;否则操作失败,next_e无定义,返回INFEASIBLE*/
LinkList p=L->next;/*p指向第一个结点*/
while(p->next)/*p所指结点有后继*/{
if(p->data==cur_e){next_e=p->next->data;return OK;}
p=p->next;}
return INFEASIBLE;
}
void MergeList_Link(LinkList &La,LinkList &Lb,LinkList &Lc)
/*算法2.12为扩展实验的内容*/
{/*已知单链线性表La和Lb的元素按值非递减排列。*/
/*归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列*/
LinkList pa=La->next,pb=Lb->next,pc;Lc=pc=La;/*用La的头结点作为Lc的头结点*/
while(pa&&pb)
if(pa->data<=pb->data){
pc->next=pa;pc=pa;pa=pa->next;}
else{
pc->next=pb;pc=pb;pb=pb->next;}
pc->next=pa?pa:pb;
/*插入剩余段*/
free(Lb);/*释放Lb的头结点*/
Lb=NULL;
}
将测试数据和主函数新定义一个文件,如取名为:linlistUse.cpp./*linlistUse.cpp主要实现算法2.9、2.10、2.11、2.12的程序*/
#include"pubuse.h"
typedef int ElemType;
#include"linklistDef.h"
#include"linklistAlgo.h"
int main(){
int n=5;
LinkList La,Lb,Lc;int i;ElemType e;
printf("按非递减顺序,");
CreateList2_Link(La,n);/*正位序输入n个元素的值,建立一个单链表*/
printf("La=");
/*输出链表La的内容*/
ListTraverse_Link(La);
printf("按非递增顺序,");
CreateList_Link(Lb,n);/*逆位序输入n个元素的值*/printf("Lb=");
/*输出链表Lb的内容*/
ListTraverse_Link(Lb);
MergeList_Link(La,Lb,Lc);/*按非递减顺序归并La和Lb,得到新表Lc*/
printf("Lc=");/*输出链表Lc的内容*/
ListTraverse_Link(Lc);
/*算法2.9的测试*/
printf("
enter insert location and value:");
scanf("%d%d",&i,&e);
ListInsert_Link(Lc,i,e);
/*在Lc链表中第i个结点处插入一个新的结点,其值为e;*/
printf("Lc=");
/*输出链表Lc的内容*/
ListTraverse_Link(Lc);
/*算法2.10的测试*/
printf("
enter deletd location:");
scanf("%d",&i);
ListDelete_Link(Lc,i,e);
/*在Lc链表中删除第i个结点,其值为返回给e变量*/
printf("The Deleted e=%d
",e);/*输出被删结点的内容*/
printf("Lc=");
/*输出链表Lc的内容*/
ListTraverse_Link(Lc);
return 0;
}
运行结果:
何为线性无关,如何判断线性相关,线性无关
线性相关,就是在一组数据中有一个或者多个量可以被其余量表示。线性无关,就是在一组数据中没有一个量可以被其余量表示。从维数空间上讲,例如,一个三维空间,那么必须用三个线性无关的向量来表示,如果在加上另外一个向量,那么这个向量必然可以由上述三个向量唯一的线性表出。在三维空间里,互相...
向量α与β线性表示有何区别
向量α无法用β1,β2,...βn来表示了。只能想法用别的方法表示。比如引入另外的向量作为基底。1、一个向量不能由另外几个向量线性表出,则这个向量与另外几个向量合在一起称线性无关的。设向量α不能由另外几个向量β1,向量β2,...,向量βn线性表出,则等价于 α=k1β1+k2β2+...+...
烦恼:PASCAL
输入文件的第一行是一个非负整数 N,表示4000年中必须呆在人间的天数,以下共N行,每行两个用空格隔开的正整数,即日期(月,日),输入文件保证无错误,日期无重复。输出 输出文件仅有一行包含一个非负整数,即在天上的时间(四舍五入精确到秒)。样例 输入 2 3 8 12 2 输出 63266 约瑟夫:prog...
何谓数据的逻辑结构?何谓数据的存储结构?两者有何联系 ?
逻辑结构指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。逻辑结构包括:1、集合结构:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系。2、线性结构:数据结构中的元素存在一对一的相互关系。3、树形结构...
数据的逻辑结构主要有哪三种?各有何特点?三者之间存在怎样的联系_百 ...
4、网络结构:通信系统的整体设计,它为网络硬件、软件、协议、存取控制和拓扑提供标准。数据元素之间存在“多对多”的关系。任何节点都可以有多个前驱和多个后驱。联系:集合结构、线性结构、树状结构和网络结构在计算机中的存储映像不同,但其本质都是逻辑结构,均反映数据元素到存储区的一个映射关系。
何谓数据的逻辑结构?何谓数据的存储结构?两者有何联系 ?
15. 散列存储方法是根据结点的关键字直接计算出该结点的存储地址。16. 数据结构中,逻辑上可以把数据结构分成线性结构和非线性结构。17. 线性结构的顺序存储结构是一种顺序存取的存储结构,线性表的链式存储结构是一种随机存取的存储结构。18. 逻辑结构与数据元素本身的形式、内容、相对位置、所含结点个数...
数组与有序表有何区别?
顺序表中的“顺序”是物理意义上的,指线形表中的元素一个接一个的存储在一片相邻的存储区域中,最典型的例子就是数组。可以这样描述:一个顺序表示的二叉树,或一个链接表示的二叉树;一个无序的线性表经过某种排序算法后形成有序表;甚至一个用顺序表表示的有序表等等。
《数据结构》考试复习
通常有集中复习、分散复习、穿插复习三种形式。课后复习宜于分散、经常进行。以记忆为主的学习内容,如英语的单词、语文的背诵课文,要今年多次重复以强化记忆,应分散复习。阶段复习最好集中用整块时间,一次复习深透为好。当然集中复习又可将性质不同的课程(如史地、数理)交替安排,穿插复习,使大脑各...
什么是sql server的数据结构?
线性结构的顺序存储结构是一种随机存取的存储结构,线性表的链式存储结构是一种顺序存取的存储结构。线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。逻辑结构与数据元素本身的形式、内容、相对位置、所含结点个数都无关。编辑本段数据结构与算法 算法的设计取决于数据(逻辑)结构,而算法的实现依赖...
一个C++的小问题SqList la,lb这句是什么意思?有何作用?
定义线性表 la lb.它的形式就好比定义 整形变量 int la,lb,只是它前面是线性表定义的。
项家智杞: 这属于数据结构题. 参考例子:线性表的链式存储与基本操作 利用线性表的链式存储结构,设计一组输入数据(假定为一组整数),能够对单链表进行如下操作: 初始化一个带表头结点的空链表; 创建一个单链表是从无到有地建立起一个链...
龙井市15669545336: 使用顺序存储方式建一个有5个元素的线性表.在第二个元素前插入一个新元素并输出线性表全 - ?
项家智杞: #include <iostream> using namespace std; typedef struct Node {int data;struct Node * next; } Node; Node * CreateNodeList() {Node *head, *p, *s;int x, cycle = 0;head = (Node*)(new Node);p = head;while(cycle<5){cout<<"intput the data of...
龙井市15669545336: 使用数组存放线性表{3,4,5,6,7}的五个数据元素.在3,4中间插入一个元素8.输出线形表的每一个元素和 - ?
项家智杞: 使用数组存放线形表{3,4,5,6,7}的五个数据元素.在3,4中间插入一个元素8.输出线形表的没有元素和线形表...
龙井市15669545336: 求写一个线性表,能输入并输出元素就好.刚学数据结构,不知该从何下手. - ?
项家智杞: 线性表实际上就是线性数组.定义一个一维数组 int a[10] 输入 for(int i=0;i<10;i++) scanf("%d",&a[i]); 输出 for(int i=0;i<10;i++) printf("%d ",a[i]);
龙井市15669545336: 从键盘上输入5个数据建立一个单链表 - ?
项家智杞: /*creat a list*/ #include "stdlib.h" #include "stdio.h" //定义一个结点 struct list { int data; struct list *next; }; typedef struct list node; typedef node *link; void main() {link ptr,head,s,pre; int num,i; head=(link)malloc(sizeof(node)); ptr=pre=head; printf("...
龙井市15669545336: 建立一个由5个整数组成的顺序表 - ?
项家智杞: /***********线性表的基本操作只有两个,插入,删除.这里写三个:初始化,插入,删除. #include#include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 #define ...
龙井市15669545336: 建立一个单链表,输入5个数字再顺序输出,不知道哪里错了..本人菜鸟 - ?
项家智杞: #include typedef int elemtype; typedef struct node{//定义链表结构 elemtype elem; struct node *next; }node,*linkList; linkList init(){ linkList La; La=(linkList)malloc(sizeof(node)); if(La==NULL){ printf("分配空间失败"); return NULL; } La->next=NULL...
龙井市15669545336: 如何把这些数据用线性表表示出来? - ?
项家智杞: struct table tab[N]{char tab[0].Dest=203.74.205.0char tab[0].Mask=255.255.255.0char tab[0].Gate=203.74.205.1char tab[0].Inte=203.74.205.1char tab[1].Dest=203.74.206.0char tab[1].Mask=255.255.255.0char tab[1].Gate=203.74.206.1...
龙井市15669545336: 利用数据结构书中的线性表的顺序结构实现中的基本操作,编程实现一个放有整型数据的线性表的输入和输出 - ?
项家智杞: 插入操作:insert(p,x)1.判断储存空间是否已满2.从尾部开始到p,每个元素移动至后一个位置3.将x写入p 删除操作:del(p)1.判断存储空间是否为空2.释放p位置元素的空间3.从p+1开始到尾部,将每个元素每个元素前移一个位置 显示...这个略了
龙井市15669545336: 由键盘输入一个整数,判断是几位,并逆序输出,要求用线性表的顺序存储结构实现!!! - ?
项家智杞: varn,len,i:longint;//len表示整数的长度a:array[1..100] of integer;//线性表存储 beginreadln(n);len:=0;while n>0 dobeginlen:=len+1;a[len]:=n mod 10;n:=n div 10;end;for i:=1 to len dowrite(a[i]);writeln; end.