题1
void zy(Linklista,datatype n,datatype k,datatype m){
int i,j;
//N个人标号
for(i=1;i<=n;i++){
Linklistx=a;
wcr(a,i);
}
Linklistx=a;
while(x->next!=a){
x=x->next;
}
//删除头
Linklisty=a;
x->next=y->next;
free(y);
//找到第一个人
while(x->data.text!=1){
x=x->next;
}
// printf(“%d\n”,x->data.text);
i=1;
while(i!=k){
x=x->next;
i++;
}
printf(“%d\n”,x->data.text);
j=n;
while(j!=0){
//for(i=1;i<m-1;i++)
i=1;
while(i!=m-1){
x=x->next;
i++;
}
// printf(“%d\n”,x->data.text);
printf(“%d\t”,x->next->data.text);
Linklist*z=x->next;
x->next=z->next;
free(z);z=NULL;
x=x->next;
// printf(“%d\n”,x->data.text);
j=j-1;
}
}
题2
/*
typedef int datatype;
typedef struct node{//必须是有名结构体,否则指针域的类型不清楚
datatype data;//数据域,存储有效数据的
struct node *next;
}
/
/
-
function创建一个链表
-
@param [ in]
-
@param [out]
/
#include <stdio.h>
#include"./03_linlist.h"
#include<stdlib.h>
Linklist create_linklist(){
Linklist* head=(Linklist*)malloc(sizeof(Linklist));//申请一个堆空间
if(NULL == head){
printf(“头结点申请失败,链表创建失败\n”);
return NULL;
}
//将头结点进行初始化
head->data.len=0;
head->next=NULL;
head->prev=NULL;
return head;
}
/* -
function创建一个链表
-
@param [ in]
-
@param [out]
/
void cr(Linklist head,datatype num){
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(NULL == temp){
printf(“创建新结点失败,插入失败\n”);
return;
}
//将结点进行初始化
temp->data.text=num;
temp->next=NULL;
temp->prev=NULL;
//将新的结点插法插入链表
temp->next=head->next;
head->next=temp;temp->prev=head;
if(temp->next!=NULL){
(temp->next)->prev=temp;
}
head->data.len++;
return;
}
void wcr(Linklisthead,datatype num){
Linklista=(Linklist*)malloc(sizeof(Linklist));
if(NULL==a){
printf(“创建新结点失败,插入失败\n”);
return;
}
//将结点初始化
a->data.text=num;
a->next=NULL;
a->prev=NULL;
//找到尾结点
Linklist*p=head;
while(p->next!=NULL){
p=p->next;
}
//尾插法插入数据
a->next=p->next;
p->next=a;a->prev=p;
head->data.len++;
return;
}
void bl(Linklist* head){
Linklistp=head;
while(p->next!=NULL){
p=p->next;
printf(“%d\t”,p->data.text);
}
printf(“\n”);
return;
}
void tsc(Linklisthead){
Linklistx=head;
if(x->next==NULL){
return;
}
Linklisty=(x->next)->next;
//删除
Linklist*z=head->next;
x->next=y;
y->prev=x;
free(z);//释放申请的堆空间
head->data.len–;
return;
}
void wsc(Linklisthead){
Linklistx=head->next;
Linklist*y=head;
while(x->next!=NULL){
x=x->next;
y=y->next;
}
free(x);
y->next=NULL;
head->data.len–;
return;
}
void wzcr(Linklista,datatype b,datatype c){
Linklistz=(Linklist*)malloc(sizeof(Linklist));
if(NULL==z){
printf(“创建新结点失败,插入失败\n”);
return;
}
Linklist*x=a;
if(b<1||b>a->data.len+1){
printf(“插入位置超过链表长度\n”);
return;
}
for(int i=0;i<b-1;i++){
x=x->next;
}
//初始化
z->data.text=c;
z->next=NULL;
z->prev=NULL;
//插入
z->next=x->next;
x->next=z;
z->prev=x;
if(z->next!=NULL){
z->next->prev=z;
}
a->data.len++;
return;
}
void wzsc(Linklista,datatype b){
Linklist x=a;
if(a->next==NULL){
printf(“链表为空”);
return;
}
if(b<1||b>a->data.len){
printf(“超过值”);
return;
}
for(int i=0;i<b-1;i++){
x=x->next;
}
Linklist* y=x->next;
x->next=y->next;
if(x-next!=NULL){
x->next->prev=x->prev
}
free(y);
y=NULL;
a->data.len–;
}