C语言 链表操作
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
int main()
{
struct node *head, *p, *q, *t;
int i, n, a;
scanf("%d", &n);
head = NULL;
for(i=1; i<=n; i++)
{
scanf("%d", &a);
//动态申请一个空间,用来存放一个结点,并用临时指针p指向这个结点
p = (struct node *)malloc(sizeof(struct node));
p->data = a;
p->next = NULL;
if(head==NULL) head=p;
else q->next=p;
q = p;
}
t = head;
while(t!=NULL)
{
printf("%d ", t->data);
t = t->next;
}
return 0;
}
//链表插入数据
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
int main()
{
struct node *head, *p, *q, *t;
int i, n, a;
scanf("%d", &n);
head=NULL;
for(i=0; i<n; i++)
{
scanf("%d", &a);
p = (struct node *)malloc(sizeof(struct node));
p->data = a;
p->next = NULL;
if(head==NULL) head=p;
else q->next = p;
q = p;
}
scanf("%d", &a);//待插入的数
t = head;
while(t!=NULL)
{
if(t->next->data > a)
{
p = (struct node *)malloc(sizeof(struct node));
p->data = a;
p->next = t->next;
t->next = p;
break;
}
t = t->next;
}
t = head;
while(t!=NULL)
{
printf("%d ", t->data);
t = t->next;
}
return 0;
}
>9 >2 3 5 8 9 10 18 26 32 >6 2 3 5 6 8 9 10 18 26 32
//模拟链表
#include<stdio.h>
int main()
{
int data[101], right[101];
//data表示数据,right表示序列右边的数的下标号
int i, n, t, len;
//读入已有的数
scanf("%d", &n);
for(i=1; i<=n; i++)
scanf("%d", &data[i]);
len = n;
//初始化数组right
for(i=1; i<=n; i++)
{
if(i!=n) right[i] = i+1;
else right[i] = 0;
}
len++;
scanf("%d", &data[len]);
t = 1;//从头部开始遍历
while(t!=0)
{
if(data[right[t]]>data[len])
{
right[len] = right[t];
right[t] = len;
break;
}
t = right[t];
}
t = 1;
while(t!=0)
{
printf("%d ", data[t]);
t = right[t];
}
return 0;
}
9 2 3 5 8 9 10 18 26 32 6 2 3 5 6 8 9 10 18 26 32

浙公网安备 33010602011771号