算法思想----以输入结束标记作为链表创建的结束
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;
}