数据结构,顺序表,存储数组,信息有编号,城市,和说明。涉及线性表初始化,增加,删除,调用,主函数的书写

我的教科书中写了线性表怎么创立的,但是一个完整的代码怎么写困扰问我许久。

以至于托更,今日终于悟了,希望对初学者有所帮助

老规矩先上代码

#include<iostream>
#include<iomanip>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
using namespace std;

typedef struct city
{
    int XH;
    char CS[40];
    char GX[40];
}ElemType;

typedef struct LinkNode
{
    ElemType data;
    struct LinkNode* next;
}LinkNode;

void CreateList(LinkNode*& L, ElemType a[], int n)//头插法
{
    LinkNode* s;
    L = (LinkNode*)malloc(sizeof(LinkNode));
    L->next = NULL;
    for (int i = 0; i < n; i++)
    {
        s = (LinkNode*)malloc(sizeof(LinkNode));
        s->data = a[i];
        s->next = L->next;
        L->next = s;
    }
}

bool ListInsert(LinkNode*& L, int i, ElemType e)
{
    int j = 0;
    LinkNode* p = L, * s;
    if (i <= 0) return false;
    while (j < i - 1 && p != NULL)
    {
        j++;
        p = p->next;
    }
    if (p == NULL)
        return false;
    else
    {
        s = (LinkNode*)malloc(sizeof(LinkNode));
        s->data = e;
        s->next = p->next;
        p->next = s;
        return true;
    }
}
bool ListDelete(LinkNode*& L, int i, ElemType& e)//删除数据元素
{
    int j = 0;
    LinkNode* p = L, * q;
    if (i <= 0) return false;
    while (j < i - 1 && p != NULL)
    {
        j++;
        p = p->next;
    }
    if (p == NULL)
        return false;
    else
    {
        q = p->next;
        if (q == NULL)
            return false;
        e = q->data;
        p->next = q->next;
        free(q);
        return true;
    }
}

void DispList(LinkNode* L)//输出线性表
{
    LinkNode* p = L->next;
    while (p != NULL)
    {
        printf("序号:%d, 城市:%s, 属性:%s。\n", p->data.XH, p->data.CS, p->data.GX);
        p = p->next;
    }

    printf("\n");
}

int main()
{
    LinkNode* L;
    ElemType city[5] = { {010,"Bejing","北京,首都"},{021,"Shanghai","上海,直辖市"},{027,"Wuhan","武汉,湖北省省会"},{020,"Xian","西安,陕西省省会"},{025,"Nanjing","南京,江苏省省会"} };
    CreateList(L, city, 5);
    DispList(L);
    ElemType e = { 000,"Chengdu","成都,四川省省会" };
    int i = 3;
    cout << "在第" << i << "个位置插入元素后:\n\n";
    ListInsert(L, i, e);
    DispList(L);
    i = 4;
    cout << "在第" << i << "个位置删除元素后:\n\n";
    ListDelete(L, i, e);
    DispList(L);
    system("pause");
    return 0;
}

再看效果

 接下来就是具体的讲解,老规矩

由于建表和函数的说明,书上非常详细,在此我重点讲解主函数调用的具体说明。完成一个完完整整的代码。直接看最后面,开头可以浅看一下。兄弟们姐妹们,冲啊!

//#include<iostream>
//#include<iomanip>
//#include<string.h>
#include<stdlib.h>                //经过测试只需要添加这两个头文件即可
//#include <corecrt_malloc.h>    //第一行也可以换成#include <corecrt_malloc.h>,因为调用了malloc函数
#include<stdio.h>
//using namespace std;
typedef struct city    //固定写法 为了定义数组中的属性
{
    int XH;
    char CS[40];
    char GX[40];
}ElemType;

typedef struct LinkNode  
{
    ElemType data;
    struct LinkNode* next;
}LinkNode;
void CreateList(LinkNode*& L, ElemType a[], int n)//头插法
{
    LinkNode* s;
    L = (LinkNode*)malloc(sizeof(LinkNode));
    L->next = NULL;
    for (int i = 0; i < n; i++)
    {
        s = (LinkNode*)malloc(sizeof(LinkNode));
        s->data = a[i];
        s->next = L->next;
        L->next = s;
    }
}

bool ListInsert(LinkNode*& L, int i, ElemType e)
{
    int j = 0;
    LinkNode* p = L, * s;
    if (i <= 0) return false;
    while (j < i - 1 && p != NULL)
    {
        j++;
        p = p->next;
    }
    if (p == NULL)
        return false;
    else
    {
        s = (LinkNode*)malloc(sizeof(LinkNode));
        s->data = e;
        s->next = p->next;
        p->next = s;
        return true;
    }
}
bool ListDelete(LinkNode*& L, int i, ElemType& e)//删除数据元素
{
    int j = 0;
    LinkNode* p = L, * q;
    if (i <= 0) return false;      //i小于0返回错误
    while (j < i - 1 && p != NULL)//表没超出长度且表不为空
    {
        j++;
        p = p->next;              //向下查找
    }
    if (p == NULL)                //表为空 返回错误
        return false;
    else
    {
        q = p->next;
        if (q == NULL)
            return false;
        e = q->data;
        p->next = q->next;
        free(q);
        return true;
    }
}
void DispList(LinkNode* L)//输出线性表
{
    LinkNode* p = L->next;
    while (p != NULL)      //指针指向的地址不为空,打印地址中的信息
    {
        printf("序号:%d, 城市:%s, 属性:%s。\n", p->data.XH, p->data.CS, p->data.GX);
        p = p->next;
    }
    printf("\n");
}
int main()
{
    LinkNode* L;           //初始化线性表并以L代称
    ElemType city[5] = { {010,"Bejing","北京,首都"},{021,"Shanghai","上海,直辖市"},{027,"Wuhan","武汉,湖北省省会"},{020,"Xian","西安,陕西省省会"},{025,"Nanjing","南京,江苏省省会"} };
                           //自定义数组中的元素,注意格式
    CreateList(L, city, 5);//调用创建数据表这个函数,这个函数括号中的元素缺一不可,括号里面的值,第一个是L(也叫做数据表的代称),第二个是你的数组名(一定是第八行最后面的那个),第三个是上一行中数组中的元素个数
    DispList(L);           //输出函数括号里面只需要给个L即可(也就是你的线性表)
    ElemType e = { {002},{"chengdu"},{"成都,四川省省会"} }; //开始插入新元素,定义一个变量e(变量名随便你改,这里改了函数那里也记得改)用来存储新的信息(也叫字符串)
    ListInsert(L, 3, e);   //这个是插入函数括号里面的第一个也是一样的道理,先给L(说明这是线性表L,而不是其他的表),第二个值是你选择插入的位置,也就是输出时这条信息是第几条,第三个把初始化定义的变量e的值传入函数
    DispList(L);           //打印一遍,和94行的意思一样
    ListDelete(L, 4, e);   //调用删除函数,第一个先给L(和第96行的意思一样),第二个值表明删除的是第几个元素,第三个值表示需要这么一个变量,把值存起来,如果他符合你传入的第二个值,那程序就把他删掉,所以第三个值是变量e                 
    DispList(L);           //打印一遍,不想说了,说三遍了
    return 0;              //程序结束
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小白努力中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值