#include <stdio.h>
#include <stdlib.h>
typedef struct list{
int data;
struct list *next;
} Node,*SqList;
void creatList_last(SqList &L){
//尾插法
printf("随机生成25个元素(1-1000):\n");
L = (SqList)malloc(sizeof(Node));
L->next=NULL;
Node *q = (SqList)malloc(sizeof(Node));
q = L;
int temp,i;
for(i=0;i<25;i++){
temp = rand()%1000+1;
// printf("%d ",temp);
Node *p = (SqList)malloc(sizeof(Node));
p->data=temp;
p->next=NULL;
q->next=p;
q = p;
}
// printf("\n");
}
void creatList_head(SqList &L){
//头插法
printf("随机生成10个元素(1-100)\n");
L = (SqList)malloc(sizeof(Node));
L->next=NULL;
int temp,i;
for(i=0;i<10;i++){
temp = rand()%1000+1;
// printf("%d ",temp);
Node *p = (SqList)malloc(sizeof(Node));
p->data=temp;
p->next=L->next;
L->next=p;
}
// printf("\n");
}
void display(SqList &L){
SqList q;
q = L->next;
int i = 0;
while(q!=NULL){
printf("%3d:%4d ",i+1,q->data);
q=q->next;
++i;
if(i%10==0){
printf("\n");
}
}
printf("\n");
}
int LengthList(SqList &L){
int count = 0;
SqList q;
q = L->next;
while(q!=NULL){
count++;
q=q->next;
}
// printf("此链表的表长为%d\n",count);
return count;
}
Node* getElem(SqList &L,int x){
//按位查找
int i=1;
SqList q;
q = L->next;
if(x<1||x>LengthList(L)){
printf("输入的序号错误!\n");
return NULL;
}else{
while(q!=NULL&&i<x){
i++;
q=q->next;
}
printf("查找的结果为:%d \n",q->data);
return q;
}
}
int LocalElem(SqList &L,int value){
//按值查找
int index = 0;
SqList q;
q = L->next;
while(q!=NULL){
index++;
if(value==q->data){
printf("%d在链表中第%d个\n",value,index);
break;
}
q=q->next;
}
return index+1;
}
bool InsertElem(SqList &L,int x,int value){
//插入元素
Node *stone = (Node*)malloc(sizeof(Node));
stone->data=value;
SqList p = L->next;
int i=1;
if(x<1||x>LengthList(L)+1){
printf("输入的序号错误!\n");
return false;
}
while(p!=NULL&&i<x-1){
i++;
p=p->next;
}
stone->next = p->next;
p->next = stone;
return true;
}
bool DeleteElem(SqList &L,int x){
// 删除元素
if(x<1||x>LengthList(L)){
printf("输入的序号错误!\n");
return false;
}
SqList p = L->next;
SqList q;
int i = 1;
while(p!=NULL && i<x-1){
i++;
p=p->next;
}
q = p->next;
p->next = q->next;
free(q);
}
main(){
SqList L;
creatList_last(L);
// creatList_head(L);
display(L);
LengthList(L);
int temp,value;
printf("请输入要查找的序号:\n");
scanf("%d",&temp);
getElem(L,temp);
// printf("请输入要查找的值:\n");
// scanf("%d",&temp);
// LocalElem(L,temp);
printf("请输入要插入的位置和值:\n");
scanf("%d%d",&temp,&value);
InsertElem(L,temp,value);
display(L);
LengthList(L);
printf("请输入要删除的位置:\n");
scanf("%d",&temp);
DeleteElem(L,temp);
display(L);
}
单链表的插入,删除,查找,生成,遍历
于 2022-07-01 10:28:03 首次发布