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

posted @ 2022-07-20 17:20  惠安雪乃  阅读(27)  评论(0)    收藏  举报