#include<stdio.h>
#include<stdlib.h>
typedef struct node* point;
struct node{
int data;
point next;
};
typedef point LinkedList;
void initial(LinkedList* list);
int insertElem(int data,LinkedList list,int position);
int delElem(int position,LinkedList list);
void iteratorElem(LinkedList list);
int getElem(LinkedList list , int position);
int updateElem(LinkedList list, int position, int data);
bool isNull(LinkedList list);
int getLength(LinkedList list);
void initial(LinkedList* list){ //指向指针的指针,用于改变指针指向的指针指向的内存地址。
*list = (LinkedList)malloc(sizeof(LinkedList));
(*list)->next=NULL;
}
int insertElem(LinkedList list,int position,int data){
point p = list;
int i = 0; //开始的,指向头结点,此节点的下标为0。p指向头结点位置
while(p!=NULL&&i<position-1){ //获取position-1位置的point内存地址
p = p->next;
i++;//p指向线性表中第i个元素的地址
}
if(p == NULL){ //position-1位置不存在,就不能往列表中在插入position位置的值
return NULL;
}
point node = (point)malloc(sizeof(point));
node->data = data;
node->next=p->next;//注意顺序
p->next = node;
return 1;
}
int delElem(int position,LinkedList list){
point p = list;
int i = 0;
while(i<position-1&&p!=NULL){ //得到position-1位置的指针
p=p->next;
i++;
}
if(p == NULL){//该位置不存在,返回
return NULL;
}
point temp = p->next;
p->next = temp->next; //删除节点操作
// free(temp);//释放堆内存
return 1;
}
void iteratorElem(LinkedList list){
point p = list->next;
int i = 0;
printf("\n======================================================\n");
while(p!=NULL){
i++;
printf("%d = %d\t",i,p->data);
p=p->next;
}
printf("\n======================================================\n");
}
int getElem(LinkedList list , int position){
point p = list;
int i = 0;
while(p!=NULL && i<position){
p = p->next;
i++;
}
if(p==NULL){
return NULL;
}
return p->data;
}
int updateElem(LinkedList list, int position, int data){
point p = list;
int i = 0;
while(i<position&&p!=NULL){
p=p->next;
i++;
}
if(p==NULL){
return NULL;
}
p->data = data;
return 1;
}
bool isNull(LinkedList list){
point p = list->next;
if(p->next!=NULL)
return false;
else
return true;
}
int getLength(LinkedList list){
point p = list;
int i=0;
while(p!=NULL){
p=p->next;
i++;
}
return i;
}
void main(void){
LinkedList list = NULL;
initial(&list);
if(list == NULL){
printf("ssss");
}
int num ;
for(int i = 0;i<10;i++){
scanf("%d" , &num);
int result = insertElem(list,i+1,num);
if(result == NULL){
printf("%d insert error \n",num);
}
}
iteratorElem(list);
updateElem(list,5,100);
iteratorElem(list);
delElem(5,list);
delElem(9,list);
iteratorElem(list);
printf("\n%d",getLength(list));
printf("\n%d",getElem(list,3));
}
#include<stdlib.h>
typedef struct node* point;
struct node{
int data;
point next;
};
typedef point LinkedList;
void initial(LinkedList* list);
int insertElem(int data,LinkedList list,int position);
int delElem(int position,LinkedList list);
void iteratorElem(LinkedList list);
int getElem(LinkedList list , int position);
int updateElem(LinkedList list, int position, int data);
bool isNull(LinkedList list);
int getLength(LinkedList list);
void initial(LinkedList* list){ //指向指针的指针,用于改变指针指向的指针指向的内存地址。
*list = (LinkedList)malloc(sizeof(LinkedList));
(*list)->next=NULL;
}
int insertElem(LinkedList list,int position,int data){
point p = list;
int i = 0; //开始的,指向头结点,此节点的下标为0。p指向头结点位置
while(p!=NULL&&i<position-1){ //获取position-1位置的point内存地址
p = p->next;
i++;//p指向线性表中第i个元素的地址
}
if(p == NULL){ //position-1位置不存在,就不能往列表中在插入position位置的值
return NULL;
}
point node = (point)malloc(sizeof(point));
node->data = data;
node->next=p->next;//注意顺序
p->next = node;
return 1;
}
int delElem(int position,LinkedList list){
point p = list;
int i = 0;
while(i<position-1&&p!=NULL){ //得到position-1位置的指针
p=p->next;
i++;
}
if(p == NULL){//该位置不存在,返回
return NULL;
}
point temp = p->next;
p->next = temp->next; //删除节点操作
// free(temp);//释放堆内存
return 1;
}
void iteratorElem(LinkedList list){
point p = list->next;
int i = 0;
printf("\n======================================================\n");
while(p!=NULL){
i++;
printf("%d = %d\t",i,p->data);
p=p->next;
}
printf("\n======================================================\n");
}
int getElem(LinkedList list , int position){
point p = list;
int i = 0;
while(p!=NULL && i<position){
p = p->next;
i++;
}
if(p==NULL){
return NULL;
}
return p->data;
}
int updateElem(LinkedList list, int position, int data){
point p = list;
int i = 0;
while(i<position&&p!=NULL){
p=p->next;
i++;
}
if(p==NULL){
return NULL;
}
p->data = data;
return 1;
}
bool isNull(LinkedList list){
point p = list->next;
if(p->next!=NULL)
return false;
else
return true;
}
int getLength(LinkedList list){
point p = list;
int i=0;
while(p!=NULL){
p=p->next;
i++;
}
return i;
}
void main(void){
LinkedList list = NULL;
initial(&list);
if(list == NULL){
printf("ssss");
}
int num ;
for(int i = 0;i<10;i++){
scanf("%d" , &num);
int result = insertElem(list,i+1,num);
if(result == NULL){
printf("%d insert error \n",num);
}
}
iteratorElem(list);
updateElem(list,5,100);
iteratorElem(list);
delElem(5,list);
delElem(9,list);
iteratorElem(list);
printf("\n%d",getLength(list));
printf("\n%d",getElem(list,3));
}