本周学习情况:
高数:进行定积分的学习,了解其背景,概念,性质,以及牛顿-莱布尼茨公式的运用,复习不定积分的求法,熟悉换元法和分部积分法的运用;
专业:
本周专业课习题完成情况:
工作室:继续学习链表的基本运用,熟悉链表的基本操作
7-4 单链表基本操作
请编写程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列,输出实施上述操作后的链表。单链表数据域值为整数。
输入格式:
输入第1行为1个正整数n,表示当前单链表长度;第2行为n个空格间隔的整数,为该链表n个元素的数据域值。第3行为1个正整数m,表示对该链表施加的操作数量;接下来m行,每行表示一个操作,为2个或3个整数,格式为0 k d或1 k。0 k d表示在链表第k个结点后插入一个数据域值为d的结点,若k=0则表示表头插入。1 k表示删除链表中第k个结点,此时k不能为0。注:操作序列中若含有不合法的操作(如在长度为5的链表中删除第8个结点、删除第0个结点等),则忽略该操作。n和m不超过100000。
输出格式:
输出为一行整数,表示实施上述m个操作后的链表,每个整数后一个空格。输入数据保证结果链表不空。
输入样例:
5
1 2 3 4 5
5
0 2 8
0 9 6
0 0 7
1 0
1 6
输出样例:
7 1 2 8 3 5
#include<stdio.h>
#include<stdlib.h>
struct Link{
int date;
struct link *next;
};
int count;
struct Link *q,*p,*head=NULL;
void Creat_link(int n)
{
for(int i=0;i<n;i++)
{
int m;
scanf("%d",&m);
p=(struct Link*)malloc(sizeof(struct Link));
p->date=m;
if(head==NULL)
{
head=q=p;
}
else
{
q->next=p;
q=p;
}
count++;
}
q->next=NULL;
}
void charu(int x, int y)
{
q=head;
p=(struct Link *)malloc(sizeof(struct Link));
p->date=y;
if(x==0)
{
p->next=head;
head=p;
count++;
}
if(x>0&&x<=count)
{
for(int i=1;i<x;i++)
q=q->next;
p->next=q->next;
q->next=p;
count++;
}
}
void shanchu(int n )
{
p=head;
if(n==1)
{
head=p->next;
count--;
}
if(n>1&&n<=count)
{
for(int i=2;i<n;i++)
{
p=p->next;
}
q=p->next;
p->next=q->next;
count--;
}
}
int main()
{
int n;
scanf("%d",&n);
Creat_link(n);
int m;
scanf("%d",&m);
for(int i=0;i<m;i++)
{
int x,y,z;
scanf("%d",&x);
if(x==0)
{
scanf("%d %d",&y,&z);
charu(y,z);
}
if(x==1)
{
scanf("%d",&y);
shanchu(y);
}
}
struct Link *r;
p=head;
while(p!=NULL)
{
r=p;
printf("%d ",p->date);
p=p->next;
free(r);
}
free(r->next);
return 0;
}
注:下周开始期末复习,首先进行体育跆拳道的理论知识复习,中国近代史纲要的复习。