顺序表的基本操作(C语言实现)
c语言实现顺序表的基本操作

c语⾔实现顺序表的基本操作数据结构顺序表操作复制代码代码如下:#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define LIST_INIT_SIZE 100#define LISINCREMENT 10#define ElemType int#define Status inttypedef struct Sq{ElemType *elem;int length;int listsize;}SqList;Status InitList(SqList *L){L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L->elem)return 0;L->length=0;L->listsize=LIST_INIT_SIZE;return 1;}Status ListInsert(SqList *L,int i,ElemType e){int *q,*p;if(i<1||i>L->length)return 0;if(L->length>L->listsize){ElemType *newbase=(ElemType*)realloc(L->elem,(LIST_INIT_SIZE+LISINCREMENT)*sizeof(ElemType)); if(!newbase)return 0;L->elem=newbase;L->listsize+=(LISINCREMENT);}q=&(L->elem[i-1]);for(p=&(L->elem[L->length-1]);p>=q;--p)*(p+1)=*p;*q=e;++L->length;return 1;}Status ListDelete(SqList *L,int i,ElemType e){int *p,*q;if(i<1||i>L->length)return 0;p=&(L->elem[i-1]);e=*p;q=L->elem+L->length-1;for(++p;p<=q;++p)*(p-1)=*p;--L->length;return 1;}int main(void){int i,j,e,lo,temp;SqList *L=(SqList*)malloc(sizeof(SqList)); InitList(L);printf("请输顺序表的长度:\n");scanf("%d",&L->length);printf("请输⼊顺序表的各个元素:\n");for(i=0;i<L->length;++i)scanf("%d",&L->elem[i]);printf("输⼊的顺序表是:\n");for (i=0;i<L->length;++i){printf("%d ",L->elem[i]);}printf("\n");printf("请输⼊插⼊的位置以及节点:\n"); scanf("%d%d",&j,&e);ListInsert(L,j,e);printf("插⼊后的顺序表为:\n");for (i=0;i<L->length;++i){printf("%d ",L->elem[i]);}printf("\n");printf("请输⼊要删除的位置:");scanf("%d",&lo);ListDelete(L,lo,temp);for (i=0;i<L->length;++i){printf("%d ",L->elem[i]);}printf("\n");free(L);return 0;}。
顺序表的基本操作实验报告

顺序表的基本操作实验报告一、实验目的本次实验旨在深入理解和掌握顺序表的基本操作,包括顺序表的创建、插入、删除、查找和遍历等功能,并通过实际编程实现,加深对数据结构中顺序存储结构的理解和应用能力。
二、实验环境本次实验使用的编程语言为 C 语言,编程环境为 Visual Studio 2019。
三、实验原理顺序表是一种线性表的顺序存储结构,它使用一组连续的存储单元依次存储线性表中的元素。
在顺序表中,元素的逻辑顺序与物理顺序是一致的。
顺序表的基本操作包括:1、创建顺序表:为顺序表分配存储空间,并初始化相关参数。
2、插入操作:在指定位置插入元素,需要移动后续元素以腾出空间。
3、删除操作:删除指定位置的元素,并将后续元素向前移动。
4、查找操作:在顺序表中查找指定元素,返回其位置或表示未找到。
5、遍历操作:依次访问顺序表中的每个元素。
四、实验步骤1、定义顺序表的数据结构```cdefine MAXSIZE 100 //定义顺序表的最大长度typedef struct {int dataMAXSIZE; //存储顺序表元素的数组int length; //顺序表的当前长度} SeqList;```2、顺序表的创建```cvoid InitList(SeqList L) {L>length = 0; //初始化顺序表长度为 0}```3、顺序表的插入操作```cint InsertList(SeqList L, int i, int e) {if (L>length >= MAXSIZE) {//顺序表已满return 0;}if (i < 1 || i > L>length + 1) {//插入位置不合法return 0;}for (int j = L>length; j >= i; j) {//移动元素为插入腾出位置L>dataj = L>dataj 1;}L>datai 1 = e; //插入元素L>length++;//顺序表长度增加 1return 1;}```4、顺序表的删除操作```cint DeleteList(SeqList L, int i) {if (i < 1 || i > L>length) {//删除位置不合法return 0;}for (int j = i; j < L>length; j++){//移动元素填补删除位置L>dataj 1 = L>dataj;}L>length; //顺序表长度减少 1return 1;}```5、顺序表的查找操作```cint SearchList(SeqList L, int e) {for (int i = 0; i < Llength; i++){if (Ldatai == e) {//找到元素return i + 1;}}return 0; //未找到元素}```6、顺序表的遍历操作```cvoid TraverseList(SeqList L) {for (int i = 0; i < Llength; i++){printf("%d ", Ldatai);//输出顺序表中的元素}printf("\n");}```五、实验结果与分析1、测试创建顺序表```cSeqList L;InitList(&L);```创建成功,顺序表初始长度为 0。
顺序表的基本操作

采用的数据描述为:顺序表在C语言中用一维数组表示。
(1)定义线性表
#define MAXLEN 50/*线性表的最大长度*/
typedef struct{int elem[MAXLEN];/*顺序表中存放元素的数组*/
int last;/*顺序表的长度,即元素个数*/
}Sqlisttp;
3.对顺序表进行元素的删除操作
三、实验步骤:
1)输入一个顺序表,并输出,验证输入的内容与输出的内容是否一致。
2)实现顺序表的插入操作(在第I个元素之前插入一个元素,即将线性表中从第I个元素开始的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置)。
3)实现顺序表的删除操作(删除第I个元素,即把第I个元素之后的所有元素前移一个位置)。
st--;}/*顺序表V的长度减1*/
return V;}
(4)顺序表元素输出函数
void display(Sqlisttp V)
{ int j;
for(j=0;j<=st-1;j++) printf("%d ",V.elem[j]);
printf("\n"); }
(5)主函数
main()
return V;}
(3)在顺序表V中删除第i个元素
Sqlisttp delete(Sqlisttp V,int i)
{int j;
if(i<1||i>st) printf("ERROR!");/*删除位置不正确则出错*/
else { for(j=i;j<=st-1;j++)
V.elem[j-1]=V.elem[j];/*将第i+1个元素及后继元素位置向前移一位*/
顺序表的基本操作--插入,删除,合并

{
ElemType*newbase,*p,*q;
if(i<1||i>L->length+1)returnERROR;
if(L->length>=L->listsize)
{
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
printf("Listsize: %d\n\n",La.listsize);
}
else
printf("error!");
/*------------------INIT-----------------*/
if(InitList_sq(&Lb))
{
printf("Init is ok!\n");
printf("Length: %d\n",Lb.length);
实验
准备
你为本次实验做了哪些准备:
在课后认真复习,基于上课的基础上,对于线性表的存储,插入,删除,合并等有了一定的了解,对于书上给出的程序反复捉摸,达到了较熟练的程度。
实验
进度
本次共有1个练习,完成个。
实验
总结
日
本次实验的收获、体会、经验、问题和教训:
顺序表初始化、插入、删除算法。
实现两个有序表合并算法.
for(i=1;i<=n;i++)
{
scanf("%d",&e) ;
数据结构(c语言版)课后习题答案完整版

数据结构(c语言版)课后习题答案完整版数据结构(C语言版)课后习题答案完整版一、数据结构概述数据结构是计算机科学中一个重要的概念,用来组织和存储数据,使之可以高效地访问和操作。
在C语言中,我们可以使用不同的数据结构来解决各种问题。
本文将提供完整版本的C语言数据结构的课后习题答案。
二、顺序表1. 顺序表的定义和基本操作顺序表是一种线性表,其中的元素在物理内存中连续地存储。
在C 语言中,我们可以通过定义结构体和使用指针来实现顺序表。
以下是顺序表的一些基本操作的答案:(1)初始化顺序表```ctypedef struct{int data[MAX_SIZE];int length;} SeqList;void InitList(SeqList *L){L->length = 0;}```(2)插入元素到顺序表中```cbool Insert(SeqList *L, int pos, int elem){if(L->length == MAX_SIZE){return false; // 顺序表已满}if(pos < 1 || pos > L->length + 1){return false; // 位置不合法}for(int i = L->length; i >= pos; i--){L->data[i] = L->data[i-1]; // 向后移动元素 }L->data[pos-1] = elem;L->length++;return true;}```(3)删除顺序表中的元素```cbool Delete(SeqList *L, int pos){if(pos < 1 || pos > L->length){return false; // 位置不合法}for(int i = pos; i < L->length; i++){L->data[i-1] = L->data[i]; // 向前移动元素 }L->length--;return true;}```(4)查找顺序表中的元素```cint Search(SeqList L, int elem){for(int i = 0; i < L.length; i++){if(L.data[i] == elem){return i + 1; // 找到元素,返回位置 }}return -1; // 未找到元素}```2. 顺序表习题解答(1)逆置顺序表```cvoid Reverse(SeqList *L){for(int i = 0; i < L->length / 2; i++){int temp = L->data[i];L->data[i] = L->data[L->length - 1 - i]; L->data[L->length - 1 - i] = temp;}}```(2)顺序表元素去重```cvoid RemoveDuplicates(SeqList *L){for(int i = 0; i < L->length; i++){for(int j = i + 1; j < L->length; j++){if(L->data[i] == L->data[j]){Delete(L, j + 1);j--;}}}}```三、链表1. 单链表单链表是一种常见的链式存储结构,每个节点包含数据和指向下一个节点的指针。
顺序表的基本操作--实验报告

实验报告附:源程序:#include<stdio.h>#define Maxsize 100#define error 0#define ok 1typedef struct{int elem[Maxsize];int last;}SeqList;int InsList(SeqList *L,int a,int i); int Locate(SeqList L,int e);int Del(SeqList *L,int i);void main(){int i,e,a;int list1,list2;SeqList L;st=0;for(i=0;i<100;i++){printf("请输入顺序表元素\n");scanf("%d",&L.elem[i]);if(L.elem[i]==-1)break;st++;}if(L.elem[st]==-1)st--;printf("要插入的元素,位置为\n"); scanf("%d,%d",&a,&i);list1=InsList(&L,a,i);if(list1){printf("插入后的顺序表为:\n");for(i=0;i<=st;i++)printf("%d",L.elem[i]);printf("\n");}elseprintf("插入失败!");printf("要查找的元素为\n");scanf("%d",&e);list2=Locate(L,e);if(!list2)printf("该元素不存在\n");elseprintf("该元素所在位置的序号为:%d\n",list2);/*删除元素*/printf("是否要删除该元素?<是请输入1 ,否请输入0 >\n");int m;scanf("%d",&m);if(m){Del(&L,list2);printf("删除后的顺序表为:\n");for(i=0;i<=st;i++)printf("%d",L.elem[i]);printf("\n");}else printf("未删除元素%d\n",e);}int InsList(SeqList *L,int a,int i)//i位置,下标i-1{int p;if(L->last>=Maxsize-1){printf("表已满,无法插入");return(error);}for(p=L->last;p>=i-1;p--)L->elem[p+1]=L->elem[p];L->elem[i-1]=a;L->last++;return(ok);}int Locate(SeqList L,int e){int i=0;while((i<=st)&&(L.elem[i]!=e)) i++;if (i<=st)return(i+1);else return(error);}int Del(SeqList *L,int i){int k;for(k=i;k<=L->last;k++)L->elem[k-1]=L->elem[k];L->last--;return ok;}。
顺序表的基本操作

建立顺序表实现顺序表的基本操作2011-9-12 16:10提问者:浚痕|浏览次数:1361次(1)建立4个元素的顺序表SqList={2,3,4,5},实现顺序表的基本操作;(2)在SqList={2,3,4,5}的元素4与5之间插入一个元素9,实现顺序表插入的基本操作;(3)在SqList={2,3,4,9,5}中删除指定位置(i=3)上的元素,实现顺序表删除的操作#include <iostream.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;#define LIST_INIT_SIZE 10#define LISTINCREMENT 2typedef struct shunxubiao{ElemType *list;int size;int Maxsize;}SqList;int InitList_Sq(SqList &L){// 构造一个空的线性表L。
L.list = new ElemType[LIST_INIT_SIZE];if (!L.list) return OVERFLOW; // 存储分配失败L.size = 0; // 长度为0L.Maxsize = LIST_INIT_SIZE; // 初始存储容量return OK;} // InitList_Sqint InsertList_Sq(SqList &L, int i, ElemType e){ElemType *p,*q;if (i < 1 || i > L.Maxsize+1) return ERROR;q = &(L.list[i-1]); // q指示插入位置for (p=&(L.list[L.Maxsize-1]); p >= q; --p)*(p+1) = *p;// 插入位置及之后的元素右移*q = e; // 插入e++L.size; // 表长增1return OK;} // ListInsert_Sqint LocateElem_Sq(SqList L, ElemType e) {// 在顺序表中查询数据元素e,若存在,则返回它的位序,否则返回0 int i = 1; // i 的初值为第1 元素的位序ElemType *p = L.list; // p 的初值为第1 元素的存储位置while (i <= L.size && *p!=e){++i;++p;}if (i <= L.size) return i;else return 0;}Status InsertList_Sq(SqList &L,ElemType e,ElemType f,ElemType g) {int i=LocateElem_Sq(L,e);int j=LocateElem_Sq(L,f);if(i==j-1){InsertList_Sq(L,j,g);return OK;}else return ERROR;}int GetList_Sq(SqList L,int i){if(i>0 && i<=L.size){return L.list[i];}elsereturn ERROR;}Status ListDelete_Sq(SqList &L, int i, ElemType &e){ElemType *p,*q;if ((i < 1) || (i > L.Maxsize)) return ERROR;p = &(L.list[i-1]); // p为被删除元素的位置e = *p; // 被删除元素的值赋给eq = L.list+L.size-1; // 表尾元素的位置for (++p; p <= q; ++p)*(p-1) = *p; // 被删除元素之后的元素左移--L.size; // 表长减1return OK;} // ListDelete_Sqvoid Create_Sq(SqList &L){cout<<"创建顺序表"<<endl;cout<<"请输入元素个数:";int count;cin>>count;for(int i=0;i<count;i++){cout<<"请输入第"<<i+1<<"个数:";cin>>L.list[i];++L.size;}}void Print_Sq(SqList &L){cout<<"输出顺序表:"<<endl;for(int i=0;i<L.size;i++)cout<<L.list[i]<<" ";}void main(){SqList myList;ElemType e,f,g,sc;InitList_Sq(myList);Create_Sq(myList);cout<<"请输入要插入顺序表的元素:"<<endl;cin>>g;cout<<"请输入新插入元素在顺序表中哪两个元素之间:"<<endl;cin>>e>>f;if(!InsertList_Sq(myList,e,f,g))cout<<"插入的位置不对!"<<endl;cout<<"删除一个元素,请输入要删除的位序:"<<endl;int wx;cin>>wx;if(!ListDelete_Sq(myList,wx,sc))cout<<"删除元素失败!"<<endl;Print_Sq(myList);}链表基本操作练习(C语言)2011-9-1 19:40提问者:追觉者|浏览次数:440次1 链表初始化创建一个链表。
顺序表基本操作的实现

【实验名称】顺序表基本操作的实现【实验目的】1. 熟悉调试工具VC++6.0的使用2. 温习C++相关程序的编写与应用3. 掌握顺序表的基本操作:构造顺序表、插入、删除、查找等4. 掌握顺序表的应用:顺序表的合并等运算【实验原理】VC6.0工具的使用,C++类实现顺序表的定义及基本操作算法的实现,应用顺序表解决实际问题。
【学时安排】2学时上机实践【具体操作内容及要求】1.创建一个目录(学号命名),然后创建项目和源文件完成本次实验内容:(1)创建项目或源文件名为“Ex1_(学号后四位).cpp”;(2)编写并调试线性表的C++模板类定义,即调试运行课本中44页程序2.2(3)编写并调试顺序表类定义(由线性表类派生)及顺序表基本操作的算法实现。
即调试运行课本46~50页程序2.5~2.9。
(4)编写主函数main,实现课本52页程序2.10中顺序表的合并操作应用。
(注意算法的改进)(5)注意所有变量、类名、方法名的命名规范。
2. 撰写实验报告(下载实验报告模板),内容包括:实验原理、实验目的、实验具体步骤及实验结果(运行效果截图)。
3. 将实验报告和程序源文件放在一个以学号命名的文件夹中,然后压缩(如2010011213.rar)提交,注意提交截止时间。
实验结果:①编程代码:A: LinearList.h头文件代码:#include <iostream.h>#include <stdlib.h>class LinearList{public:LinearList(){};~LinearList(){};virtual int Size()const=0;virtual int Length()const=0;virtual int Search(T& x)const=0;virtual int Locate(int i)const=0;virtual bool getData(int i,T& x)const=0;virtual void setData(int i,T& x)=0;virtual bool Insert(int i,T& x)=0;virtual bool Remove(int i,T& x)=0;virtual bool IsEmpty()const=0;virtual bool IsFull()const=0;// virtual void Sort()=0;virtual void input()=0;virtual void output()=0;// virtual LinearList<T> operator=(LinearList<T>& L)=0;};B:SeqList.h头文件代码:#include "linearlist.h"const int DefaultSize = 100;class SeqList:public LinearList<T>{public:SeqList ( int size = DefaultSize );SeqList(SeqList<T>& L);~SeqList() { delete[] data; }int Size()const{ return maxSize;}int Length()const { return last+1; } int Search( T& x ) const;int Locate(int i)const;bool getData(int i,T& x)const{if(i>0 && i<=last+1){x=data[i-1];return true;}elsereturn false;}void setData(int i,T& x){if(i>0 && i<=last+1){}}bool Insert(int i, T& x);bool Remove(int i,T& x);bool IsEmpty()const { return (last == -1)?true:false; }bool IsFull()const { return (last == maxSize - 1)?true:false; } void input();void output();SeqList<T> operator=(SeqList<T>& L);protected:T *data;int maxSize;int last;void reSize(int newSize);};template <class T>SeqList<T>::SeqList( int sz){if ( sz > 0 ) {maxSize = sz; last = -1; //置表的实际长度为空data = new T[maxSize]; //创建顺序表存储数组if(data==NULL) //动态分配失败{exit(1);}}}//赋值构造函数,用参数表中给出的已有顺序初始化新建的顺序表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define OVERFLOW 0 #define List_size 100
#define Listincrement 10 #include<stdio.h>
#include<malloc.h>
typedef float ElemType; typedef struct
{ ElemType *elem;
int length;
int listsize;
}Sqlist;
void main()
{
Sqlist L;
Sqlist creat_Sq(Sqlist*L);
void print_Sq(Sqlist*L);
void ascend(Sqlist*L,int i);
void Insert(Sqlist*L,float e);
int i;
float e;
creat_Sq(&L);
printf("\n");
print_Sq(&L);
printf("\n");
ascend(&L,i);
print_Sq(&L);
printf("\n");
Insert(&L,e);
print_Sq(&L);
printf("\n");
}
Sqlist creat_Sq(Sqlist*L)//创建顺序表
{
ElemType *newbase;
int i,n;
L->elem=(ElemType*)malloc(List_size*sizeof(ElemType));
if(!L->elem) exit(OVERFLOW);//存储分配失败
printf("请输入元数个数:\n");
scanf("%d",&n);
if(n>=List_size)//如果所需空间大于线性表的初始空间,则增加空间容量
{
newbase=(ElemType*)malloc((List_size+Listincrement)*sizeof(E lemType));
L->elem=newbase;
L->length=n;
L->listsize=List_size+Listincrement;
for(i=0;i<L->length;i++)
{ printf("请输入第%d个数据:",i+1);
scanf("%f",&(L->elem[i]));
}
if(!newbase) exit(OVERFLOW);
}
else
{L->length=n;
L->listsize=List_size;
for(i=0;i<L->length;i++)
{printf("请输入第%d个数据:",i+1);
scanf("%f",&(L->elem[i]));}
}
}
void print_Sq(Sqlist*L)//输出顺序表{
int i;
printf("顺序表中存储的元素:");
for(i=0;i<(L->length);i++)
printf("<%0.2f>",L->elem[i]); }
void ascend(Sqlist*L,int i)
{
int j,m;
float n;
i=L->length;
for(j=0;j<i;j++)
for(m=j+1;m<i;m++)
if(L->elem[j]>L->elem[m])
{
n=L->elem[j];L->elem[j]=L->elem[m];L->elem[m]=n;
}
}
void Insert(Sqlist*L,float e)
{
ElemType *newbase;
int i;
ElemType*p;
ElemType*q;
printf("请输入要插入的元素:");
scanf("%f",&e);
if((L->length+1)>=List_size)//如果所需空间大于线性表的初始空间,则增加空间容量
{
newbase=(ElemType*)malloc((List_size+Listincrement)*sizeof(E lemType));
L->elem=newbase;
L->listsize=List_size+Listincrement;
}
if(e<=L->elem[0])
{ q=&(L->elem[0]);
++L->length;
for(p=&(L->elem[L->length]);p>=q;p--)
*(p+1)=*p;
*q=e;
}
else
{
if(e>L->elem[L->length-1])
{ L->elem[L->length]=e;
++L->length;
}
else
{ for(i=0;e>L->elem[i];++i)
q=&(L->elem[i]);
printf("%d",i);
++L->length;
for(p=&(L->elem[L->length-1]);p>=q;p--)
*(p+1)=*p;
*(q+1)=e;
}
}
}。