链表的构建及输出(带头节点)
#include<bits/stdc++.h>
using namespace std;
struct Node{
int data;
struct Node* next;
};
int main(void)
{
int i,tp,n;
struct Node *Head,*p,*t,*q;
Head=NULL;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=(struct Node*)malloc(sizeof(struct Node));
scanf("%d",&tp);
p->data=tp;
p->next=NULL;
if(Head==NULL)
Head=p;
else q->next=p;
q=p;
}
t=Head;
for(i=1;i<=n;i++)
{
printf("%d ",t->data);
t=t->next;
}
return 0;
}
2、模拟链表
存储结构
插入过程:
//模拟链表
#include<bits/stdc++.h>
using namespace std;
int data[101],r[101]; //
int main(void)
{
int i,j,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&data[i]);
if(i!=n) r[i]=i+1; //不是n存储右边的节点位置
else r[i]=0; //n处是0
}
scanf("%d",&data[n+1]);
i=1,j=n+1;
while(i!=0)
{
if(data[r[i]]>data[j])
{
r[j]=r[i]; //新插入节点的编号是下一个节点的编号
r[i]=j; //原来的节点编号变为n+1
break;
}
i=r[i];
}
i=1;
while(i!=0)
{
printf("%d ",data[i]);
i=r[i];
}
return 0;
}
/*测试数据:
9
2 3 5 8 9 10 18 26 32
6
*/