算法思想----以输入结束标记作为链表创建的结束

1)构造带头结点的空链表
2)读入一个元素的值
3)当读入的元素值不是“输入结束标记”时,循环4)-7),如果是“输入结束标记”时,转步骤8)
4)申请一个新结点
5)将读入的元素值存入新结点的值域
6)将新结点插入在链表中
7)读入下一个元素的值,转步骤3)
8)建立完毕,返回头指针

尾插法建表(向后插入法):

将新结点插到当前单链表的表尾上。
思路:增加一个尾指针p,使之指向当前单链表的表尾。

头插法建表(向前插入法):

从一个空表开始,生成新结点,读入数据
将读入数据存放到新结点的数据域中,然后新结点插入到当前链表的头结点之后。

编制C/C++程序,利用链接存储方式实现下列功能:从键盘输入数据建立一个线性表(整数),并输出该线性表,输入输出要有相应的字幕提示
#include <iostream>
using namespace std;
typedef int ElemType;        //数据元素的类型为ElemType,将ElemType定义为int类型
//单链表结点的类型定义
typedef struct node
{
    ElemType data;
    node *next;
};

node* Create1()            //尾插法创建单链表
{
    ElemType x;
    node * h, *s, *p;
    h = new node;
    h->next = NULL;
    p = h;
    cin >> x;
    while (x != -1)
    {
        s = new node;
        s->data = x;
        p->next = s;
        p = s;
        cin >> x;
    }
    p->next = NULL;
    return h;
}

node* Create2()        //头插法创建单链表
{
    ElemType x;
    node *h, *s;
    h = new node;
    h->next = NULL;
    cin >> x;
    while (x != -1)
    {
        s = new node;
        s->data = x;
        s->next = h->next;
        h->next = s;
        cin >> x;
    }
    return h;
}
void Print(node *head)        //顺序输出单链表
{
    node *p;
    p = head->next;
    while (p != NULL)
    {
        cout << p->data << ",";
        p = p->next;
    }
}

int main()
{
    node *head;        //创建头指针
    cout << "请输入链表的数据,以-1作为结束:\n";
    //head = Create1();
    head = Create2();
    //cout << "这个链表数据为(尾插法):\n";
    cout << "这个链表数据为(头插法):\n";
    Print(head);
    system("pause");
    return 0;
}
Last modification:March 22nd, 2020 at 07:12 pm
如果觉得我的文章对您有帮助,请随意赞赏:)