数据结构实验1.1:顺序表

实验内容:

1.输入一组整型元素序列(不少于10个),建立顺序表。
2.在该顺序表中进行顺序查找某一元素,查找成功返回 1,否则返回 0。
3.判断该顺序表中元素是否对称,对称返回 1,否则返回 0。
4.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。
5.输入整型元素序列(不少于10个),利用有序表插入算法建立一个有序表。
6.利用算法5建立两个非递减有序表,并把它们合并成一个非递减有序表。
7.在主函数中设计一个简单菜单,调用上述算法。

实验说明 :

  1. 算法 1至算法6的有关函数用头文件方式存储,主函数包含该头文件。
  2. 存储定义
   const  int  MAXSIZE=15 ;   // 表中元素的最大个数 
   typedef  int  ElemType;   // 元素类型 
   typedef  struct  list  
    { 
      ElemType  elem[MAXSIZE];  // 静态分配 
      int  length;    // 表的实际长度 
    } SqList ;        // 顺序表的类型名 

源代码:

//head.h
#include<iostream>
using namespace std;
typedef  int  ElemType;    // 元素类型
//list.h
#include<iostream>
using namespace std;
const  int  MAXSIZE = 15;   // 表中元素的最大个数 
typedef  int  ElemType;    // 元素类型 
typedef  struct  list
{
    ElemType  elem[MAXSIZE];  // 静态分配 
    int  length;    // 表的实际长度 
} SqList;   
1.  输入一组整型元素序列(不少于10个),建立顺序表。 
// create_arr.h
#include"head.h"
void create_arr(ElemType elem[], int n)
{
cout << "请输入" << n << "个整数:" << endl;
for (int i = 0; i < n; i++)
cin >> elem[i];
cout << "建立的顺序表为:[";
for (int i = 0; i < n; i++)
cout <<elem[i] << ",";
cout << "]";
cout << endl;
}
2.  在该顺序表中进行顺序查找某一元素,查找成功返回 1,否则返回 0。 
//searvh_elem.h
#include"head.h" 
int search_elem(ElemType elem[], int n, int m)
{
    for (int i = 0; i < n; i++)
        if (elem[i] == m)
            return 1;
        else (elem[i] != m);
            return 0;
}
3.  判断该顺序表中元素是否对称,对称返回 1,否则返回 0。
//symmetry.h 
#include"head.h"
int symmetry_arr(ElemType elem[], int n)
{
    int midl, midr, mid, r = 0, m = 0;
    if (n % 2 == 0 && n != 0)
    {
        midl = elem[n / 2 - 1];
        midr = elem[n / 2];
        for (int j = n / 2 - 2; j >= 0; j--)
            if (elem[n / 2 - 1] < elem[j])
                m++;
        for (int k = n / 2 + 1; k < n; k++)
            if (elem[n / 2] < elem[k])
                r++;
        if (m + r != 0)
            return 0;
        else
            return 1;
    }
    else
    {
        mid = elem[n / 2];
        for (int i = n / 2 - 1; i >= 0; i--)
            if (elem[n / 2] < elem[i])
                m++;
        for (int j = n / 2 + 1; j < n; j++)
            if (elem[n / 2] < elem[j])
                r++;
        if (m + r != 0)
            return 0;
        else
            return 1;
    }

}
4.  实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 
//jiou_sort.h
#include"head.h"
void jiou_sort(ElemType elem[], int n)
{   
    int *p, k = 0;
    p = new int[n];
    for (int i = 0; i < n; i++)
    {
        if (elem[i] % 2 != 0)
        {
            p[k] = elem[i];
            k++;
        }
    }
    for (int i = 0; i < n; i++)
    {
        if(elem[i] % 2 == 0)
        {
            p[k] = elem[i];
            k++;
        }
    }
    for (int i = 0; i < n; i++)
        cout << p[i] << ",";
            cout<<endl ;
}
5.  输入整型元素序列(不少于10个),利用有序表插入算法建立一个有序表。
//built_sortarr.h
 #include<algorithm>
#include"head.h"
void built_sortarr(ElemType elem[], int n)
{
    cout << "请输入" << n << "个整数:" << endl;
    for (int i = 0; i < n; i++)
        cin >> elem[i];
    sort(elem, elem + n);
    for (int i = 0; i < n; i++)
        cout<< elem[i];
}
6.  利用算法5建立两个非递减有序表,并把它们合并成一个非递减有序表。
//combine_sortarr.h 
#include"head.h"
void combine_sortarr(ElemType elem1[], ElemType elem2[], int n)
{
    int *p, c,q = 0, m = 0;
    p = new int[n];
    while (elem1[q] >= 0)
    {
        p[q] = elem1[q];
        q++;
    }
    c = q;
    for (int i = 0; i < n - c; i++)
    {
        for (int j = 0; j < q; j++)
        {
            if (elem2[i] <= p[j])
            {
                for (int k = q; k >= j; k--)
                    p[k] = p[k - 1];
                p[j] = elem2[i];
                break;
            }
            else if (m = q)
                p[q] = elem2[i];
            m++;
        }
        q++;
    }
    for (int i = 0; i < n; i++)
    {
        cout << p[i] << ",";
    }
}
7.  在主函数中设计一个简单菜单,调用上述算法。
//源.cpp
#include"create_arr.h"
#include"search_elem.h"
#include"symmetry_arr.h"
#include"jiou_sort.h"
#include"built_sortarr.h"
#include"combine_sortarr.h"
#include"list.h"
int main() 
{
    struct list SqList;
    ElemType elem[MAXSIZE],  elem1[MAXSIZE];
    cout << "1. 输入一组整型元素序列,建立顺序表。" << endl;
    cout << "2.在该顺序表中进行顺序查找某一元素,查找成功返回 1,否则返回 0。" << endl;
    cout << "3.判断该顺序表中元素是否对称,对称返回 1,否则返回 0。" << endl;
    cout << "4.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。" << endl;
    cout << "5.输入整型元素序列,利用有序表插入算法建立一个有序表。" << endl;
    cout << "6.利用算法5建立两个非递减有序表,并把它们合并成一个非递减有序表。" << endl;
    cout << endl;
    int num;
    while (true) 
    {   
        cout << "请输入一个数字:";
        cin >> num;
        switch (num)
        {
        case 1:
        {
            cout << "请输入数据个数:";
            cin >> SqList.length;
            create_arr(elem, SqList.length);
            cout << endl;
        }break;
        case 2:
        {
            int x;
            cout << "请输入你要查找的数:";
            cin >> x;
            if (search_elem(elem, SqList.length, x) == 1)
                cout << "所查元素在顺序表中" << endl;
            else cout << "所查元素不在顺序表中" << endl;
            cout << endl;
        }break;
        case 3:
        {
            if (symmetry_arr(elem, SqList.length) == 1)
                cout << "顺序表对称" << endl;
            else cout << "顺序表不对称" << endl;
            cout << endl;
        }break;
        case 4:
        {
            jiou_sort(elem, SqList.length);
            cout << endl;
        }break;
        case 5:
        {
            built_sortarr(elem1, SqList.length);
            cout << endl;
        }break;
        case 6:
        {
            combine_sortarr(elem, elem1, 2 * SqList.length);
            cout << endl;
        }break;
        default:cout << "输入错误,请重新输入:" << endl;
        }
    }
    return 0;
}

代码结构:

image

运行截图:

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,924评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,902评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,716评论 0 239
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,783评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,166评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,510评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,784评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,476评论 0 196
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,196评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,459评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,978评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,321评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,964评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,046评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,803评论 0 193
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,530评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,420评论 2 265

推荐阅读更多精彩内容