数据结构线性表(1)

zz/2024/7/12 14:34:26

顺序表C语言代码实现

实验要求:编写一个头文件SqList.h,实现顺序表的各种基本操作,并在此基础上设计一个主程序(exp2_1.cpp)完成如下功能:

(1) 初始化顺序表L

(2) 依次采用尾插法插入a,b,c,d,e元素

(3) 输出顺序表L

(4) 输出顺序表L的长度

(5) 判断顺序表L是否为空

(6) 输出顺序表L的第3个元素

(7) 输出元素a的位置

(8) 在第4个元素位置上插入f元素

(9) 输出顺序表L

(10) 删除L的第3个元素

(11) 输出顺序表L

(12) 释放顺序表L

注意:在exp2_1.cpp中用以下语句加入头文件:

     # include “SqList.h

我作为初学者,有很多错误与不足,望大家能够指出,我会很乐意接受大家的建议,谢谢大家!!!

头文件:

/*文件名:SqList.h*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2//定义函数返回的类型
typedef int Status;
#define LIST_INIT_SIZE 100      //线性表存储空间的初始分配量
#define LISTINCREMENT 10        //线性表存储空间的分配增量typedef char ElemType;          //定义数据元素的类型为字符型//定义顺序表的存储结构
typedef struct
{ElemType* elem;int length;int listsize;
}SqList;                        Status InitList(SqList  &L)    
//构造一个空的顺序表L{L.elem =(ElemType*)malloc(LIST_INIT_SIZE * sizeof (ElemType));if(!L.elem)exit (OVERFLOW);L.length = 0;L.listsize = LIST_INIT_SIZE;return OK;
}
void DestroyList(SqList &L)
//销毁顺序表L{if (!L.elem) {return ERROR;                            //表不存在}free(L.elem);                       //释放内存}Status  ListEmpty(SqList  &L)  
//判断顺序表是否为空,为空返回ture,否则返回false
{if (!L.elem)  {return ERROR;                   //表不存在} if(L.length==0)  return TRUE;  else  return FALSE;  }
int ListLength(SqList &L)      
//返回线性表L的长度
{if (!L.elem)  {return ERROR;                   //表不存在}int i;while (i<L.length){i++;}return L.length;
}
void DispList (SqList &L) //打印单链表中的元素
{int i;if (ListEmpty(L))printf("数组为空");for(i=0;i<10;i++)printf("%c",L.elem[i]);printf("%c\n");return;
}Status GetElem(SqList L, int i, char &e)
//从顺序表L中查找第i个元素,由参数e返回其元素的值
{if (!L.elem)  {return ERROR;                   //表不存在}if (i < 1 || i > L.length - 1)  {return ERROR;                   //i值不合法}char * q = L.elem ;e = *(q + i -1);                    //把第i个元素给ereturn OK;
}int LocateElem(SqList L, int e)
//在顺序表L中查找元素e的位置,不存在则返回0
{if (!L.elem)  {return ERROR;                   //表不存在}int i = 1;char * p = L.elem ;while (i < L.length && *p++ != e ) {//查找与e相等的值的位置++i;}if (i <= L.length )  {return i;}return 0;
}
Status ListInsert(SqList &L, int i, char e)
//在顺序表L中第i个位置前插入元素e
{int k;if (!L.elem)  {return ERROR;                   //表不存在}if (i > L.length + 1 || i < 1)  {   //i值不合法return ERROR;}if (L.length >= L.listsize)  {char * newbase;                  //空间不足,重新分配newbase = (char *)realloc(L.elem,sizeof(char) * ( L.listsize+LISTINCREMENT));L.elem = newbase;if (!L.elem)  {return OVERFLOW;            //分配失败}L.elem=newbase;L.listsize += LISTINCREMENT;    //新空间容量}for(k=L.length-1;k>=i-1;k--)L.elem [k+1]=L.elem[k];L.elem[i-1]=e;L.length++;return OK;}//ListInsertStatus ListDelete(SqList &L, int i, char &e)//在顺序表L中删除第i个值并用e返回这个值
{int k;if (!L.elem)  {return ERROR;                   //表不存在}if (i < 1 || i > L.length )  {return ERROR;                   //i值不合法}e=L.elem[i-1];for (k=i;k<L.length;k++)L.elem[k-1]=L.elem[k];--L.length;                         //L的长度减1return OK;
}



源程序:
#include "SqList.h"  
int main ()  
{  SqList(L);  ElemType e;  printf("初始化顺序表L\n");  InitList(L);  printf("依次采用尾插法插入a,b,c,d,e元素\n");  ListInsert(L,1,'a');  ListInsert(L,2,'b');  ListInsert(L,3,'c');  ListInsert(L,4,'d');  ListInsert(L,5,'e');  printf("输出顺序表L:");  DispList(L);  printf("顺序表长度L=%d\n",L.length);  printf("顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));  GetElem(L,3,e);  printf("顺序表的第3个元素=%c\n",e);  printf ("元素a的位置=%d\n",LocateElem(L,'a'));  printf("在第4个元素位置上插入f元素\n");  ListInsert(L,4,'f');  printf("输出顺序表L:");  DispList(L);  printf("删除L的第3个元素\n");  ListDelete(L,3,e);  printf("输出顺序表L:");  DispList(L);  printf("释放顺序表L\n");  free(L.elem);  
}  


用vc6.0运行后的结果:

我作为初学者,有很多错误与不足,望大家能够指出,我会很乐意接受大家的建议,在此谢谢大家!!!


http://www.ngui.cc/zz/2390153.html

相关文章

chromium浏览器开发系列第一篇:如何获取最新chromium源码

背景&#xff1a; 最近摊上一个事儿&#xff0c;领导非要让写一篇技术文章&#xff0c;思来想去&#xff0c;自己接触chrome浏览器时间也不短了&#xff0c;干脆就总结一下吧。于是乎&#xff0c;本文顺理成章。由于有些细节必需描述清楚&#xff0c;所以这次先讲如何拿到…

中文域名,网站,启用,弘勇,xn--2gr99z.xn--fiqs8s,网址,中国,

下面这些网站是中文域名网站&#xff0c;中文域名直达网站&#xff0c;用百度要搜索关键词&#xff0c;步骤比较多&#xff0c;输入网址比较快&#xff0c;直达网站。还有一些中文域名网站&#xff0c;签名&#xff1a;游志勇。 弘勇.中国&#xff0c; xn–2gr99z.xn–fiqs8s …

仿新浪微博2014之登陆界面四(总体功能)

在前面完成了数据库操作、异步图片加载和缓存、新浪微博认证后&#xff0c;就可以进行登录界面的功能开发了&#xff0c;登录界面功能代码如下&#xff1a; package com.xhq.xweibo.ui;import java.util.ArrayList; import java.util.List;import com.sina.weibo.sdk.auth.Oau…

发一个文件读写类

<?php /* * author:xhq * email:xhq6632126.com * QQ:119948717 */ header("Content-type: text/html; charsetutf-8");class filesystem {/*名称&#xff1a;创建文件参数&#xff1a;文件名&#xff0c;写入的数据&#xff0c;模式*/function writefile($file,…

2021北京高考英语口试成绩查询,2021北京高考英语增加口试

依据北京推进高等院校考试招生规章制度综合性改革创新实施意见&#xff0c;从二零二一年起&#xff0c;英文提升口语考试&#xff0c;英语口语加听力考试总共50分&#xff0c;听闻无纸化考试2020年将首考。高考英语提升口语这针对关心今年高考的父母而言&#xff0c;很有可能并…

Java程序员面试必备的20道数据库面试解析

进了互联网公司&#xff0c;整天也就是搬砖&#xff0c;等到了面试的时候&#xff0c;发现数据库方面&#xff0c;忘得一塌糊涂&#xff0c;抽时间整理了一些数据库方面的题。进了互联网公司&#xff0c;整天也就是搬砖&#xff0c;等到了面试的时候&#xff0c;发现数据库方面…

2022最新数据库面试题大全

一、基本概念 1.主键、外键、超键、候选键 超键&#xff1a;在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键&#xff0c;多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。 候选键&#xff1a;是最小超键&#xff0c;即没有冗余…

python发音机器人_Python3从零开始搭建一个语音对话机器人

目录 01-初心缘由 最近在研究语音识别方向&#xff0c;看了很多的语音识别的资料和文章&#xff0c;了解了一下语音识别的前世今生&#xff0c;其中包含了很多算法的演变&#xff0c;目前来说最流行的语音识别算法主要是依赖于深度学习的神经网络算法&#xff0c;其中RNN扮演了…

赞一下老北京人的指路精准度

昨晚下班没事&#xff0c;网上查好公交往返路线&#xff0c;就坐公交去了趟前门大栅栏逛了逛。无意间感受到了老北京人的热情及指路的精准度。 虽在北京这么多年&#xff0c;但这个大栅栏还真没去过。特11到大栅栏&#xff0c;听公交报站&#xff0c;才知道这发音叫大栅…

新妈妈北京求职之路

我是一名孩子不满半岁的年轻妈妈。为了生活我毅然重返职场。发现在职场上与我情况相似的妈妈们非常多。那么&#xff0c;像我们这样的新妈妈在应聘中会遇到什么样的问题呢&#xff1f;我的这篇博文就是以记者采访的手法&#xff0c;记录了我应聘一家私立学校的前前后后。希望能…