参考书《啊哈算法》——啊哈磊
代码:
#include<bits/stdc++.h>
using namespace std;
//结点的结构体
struct node
{
int data; //第一个成员是整形data,用来存储具体的数值。
//第二个成员是指针,用来存储下一个结点的地址。
struct node *next; //因为下一个借点的类型也是struct node,所以这个指针的类型也必须是struct node *类型的指针。
};
void MYPrint(node *p) //打印链表
{
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl<<endl;
return;
}
int main()
{
int myarray[]={1,2,3,4,5,6,7};
int num=sizeof(myarray)/sizeof(int);
//将数组myarray中的内容传递给链表
//链表
struct node *head,*p,*lins; //首先建立一个头指针head指向链表的最开始。。当链表还没有建立的时候头指针为空。
head=NULL; //头指针初始为空
for(int i=0;i<=num-1;i++)
{
//建立一个结点,并用临时指针p指向这个结点。
p = new node ;
p->data = myarray[i]; //将数据存储到当前结点的data域中
p->next = NULL; //设置当前结点的后继指针指向空,也就是当前结点的下一个结点为空。
if(head==NULL)
{
head=p; //如果这是第一个创建的结点,则将头指针指向这个结点
}
else
{
lins->next=p; //如果这不是第一个创建的结点,则将上一个结点的后继指针指向当前结点
}
lins=p; //指针lins也指向当前结点.
}
MYPrint(head);
system("pause");
return 0;
}
运行结果:
1 2 3 4 5 6 7
请按任意键继续. . .
代码包含插入操作:
#include<bits/stdc++.h>
using namespace std;
//结点的结构体
struct node
{
int data; //第一个成员是整形data,用来存储具体的数值。
//第二个成员是指针,用来存储下一个结点的地址。
struct node *next; //因为下一个借点的类型也是struct node,所以这个指针的类型也必须是struct node *类型的指针。
};
void MYPrint(node *p) //打印链表
{
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl<<endl;
return;
}
void LinkInsert(node *t, int insernum)
{
node *p;
while(t!=NULL)
{
if(t->next==NULL||t->next->data > insernum) //如果当期结点是最后一个结点或者下一个结点的值大于待插入的值的时候插入
{
p=new node; //申请一个内存用来存放新的结点。
p->data=insernum; //新增数据存入p结点
p->next=t->next;
t->next=p;
break; //插入操作完成,结束。
}
t=t->next;
}
}
int main()
{
int myarray[]={1,2,3,4,5,7,8};
int num=sizeof(myarray)/sizeof(int);
//将数组myarray中的内容传递给链表
//链表
struct node *head,*p,*lins; //首先建立一个头指针head指向链表的最开始。。当链表还没有建立的时候头指针为空。
head=NULL; //头指针初始为空
for(int i=0;i<=num-1;i++)
{
//建立一个结点,并用临时指针p指向这个结点。
p = new node ;
p->data = myarray[i]; //将数据存储到当前结点的data域中
p->next = NULL; //设置当前结点的后继指针指向空,也就是当前结点的下一个结点为空。
if(head==NULL)
{
head=p; //如果这是第一个创建的结点,则将头指针指向这个结点
}
else
{
lins->next=p; //如果这不是第一个创建的结点,则将上一个结点的后继指针指向当前结点
}
lins = p; //指针lins也指向当前结点.
}
MYPrint(head);
int a=6;
LinkInsert(head, a);
MYPrint(head);
system("pause");
return 0;
}
运行结果为:
1 2 3 4 5 7 8
1 2 3 4 5 6 7 8
请按任意键继续. . .