先创建这三个文件:
其中singleList.h是头文件 Main.cpp是主函数文件 SingList.cpp是函数实现文件
头文件代码:
#pragma once
#ifndef _SINGLELIST_H_
#define _SINGLELIST_H_
#include<stdio.h>
#include<malloc.h>
#include<assert.h>
typedef int ElemType
;
typedef struct Node
{
ElemType data
;
struct Node
* next
;
}Node
,*PNode
;
typedef struct List
{
PNode first
;
PNode last
;
size_t size
;
}List
;
void InitList(List
* list
);
void push_back(List
* list
,ElemType num
);
void show_list(List list
);
void pushu_front(List
* list
,ElemType num
);
void pop_back(List
* list
);
void pop_front(List
* list
);
void sort(List
* list
);
void insert_val(List
* list
,ElemType num
);
void length(List
* list
);
void reserve(List
* list
);
int find(List
* list
,ElemType num
);
void clear(List
* list
);
void delect_val(List
* list
,ElemType num
);
#endif
主函数文件代码:
#include"singleList.h"
int main()
{
int select
;
ElemType num
;
List mylist
;
InitList(&mylist
);
while (true
)
{
printf("*******************************************************************\n");
printf("*****[1]push_back [2]pushu_front*\n");
printf("*****[3]show_list [4]pop_back *\n");
printf("*****[5]pop_front [6]insert_val *\n");
printf("*****[7]length [8]reverse *\n");
printf("*****[9]sort [10]find *\n");
printf("*****[11]clear [12]delect_val*\n");
printf("*****[0]auit_system *\n");
printf("*******************************************************************\n");
printf("请选择>:");
scanf_s("%d",&select
);
getchar();
if (select
== 0)
{
printf("已退出!\n");
getchar();
break;
}
switch (select
)
{
case 1:
printf("请输入要插入的值(-1作为结束):");
while (scanf_s("%d",&num
),num
!= -1)
{
push_back(&mylist
,num
);
}
break;
case 2:
printf("请输入要插入的值(-1作为结束):");
while (scanf_s("%d", &num
), num
!= -1)
{
pushu_front(&mylist
,num
);
}
break;
case 3:
show_list(mylist
);
break;
case 4:
pop_back(&mylist
);
break;
case 5:
pop_front(&mylist
);
break;
case 6:
printf("请输入你要插入的值:");
scanf_s("%d",&num
);
insert_val(&mylist
,num
);
break;
case 7:
length(&mylist
);
break;
case 8:
reserve(&mylist
);
break;
case 9:
sort(&mylist
);
break;
case 10:
printf("请输入要查找的元素:");
scanf_s("%d",&num
);
int count
;
count
= find(&mylist
, num
);
printf("%d出现的次数为(若不存在为-1):%d\n",num
,count
);
break;
case 11:
clear(&mylist
);
break;
case 12:
printf("请输入要删除的元素:");
scanf_s("%d",&num
);
delect_val(&mylist
,num
);
break;
default:
printf("输入错误,重新选择!");
break;
}
}
return 0;
}
函数实现部分的代码:
#include"singleList.h"
void InitList(List
* list
)
{
list
->first
= list
->last
= (Node
*)malloc(sizeof(Node
));
assert(list
->first
!= NULL);
list
->first
->next
= NULL;
list
->size
= 0;
}
void push_back(List
* list
,ElemType num
)
{
Node
* s
= (Node
*)malloc(sizeof(Node
));
assert(s
!= NULL);
Node
* p
= list
->first
;
while (p
->next
!= NULL)
{
p
= p
->next
;
}
s
->data
= num
;
list
->last
->next
= s
;
list
->last
= s
;
s
->next
= NULL;
list
->size
++;
}
void show_list(List list
)
{
if (list
.size
== 0)
{
printf("链表为空!!\n");
return;
}
Node
* p
= list
.first
->next
;
while (p
!= NULL)
{
printf("%d->",p
->data
);
p
= p
->next
;
}
printf("\n");
}
void pushu_front(List
* list
,ElemType num
)
{
Node
* s
= (Node
*)malloc(sizeof(Node
));
assert(s
!= NULL);
s
->data
= num
;
if (list
->size
== 0)
{
list
->first
->next
= s
;
list
->last
= s
;
s
->next
= NULL;
list
->size
++;
return;
}
s
->next
= list
->first
->next
;
list
->first
->next
= s
;
list
->size
++;
}
void pop_back(List
* list
)
{
if (list
->size
== 0)
{
printf("链表个数为0无法删除!");
return;
}
Node
* p
= list
->first
;
while (p
->next
!= list
->last
)
{
p
= p
->next
;
}
list
->last
= p
;
free(p
->next
);
list
->last
->next
= NULL;
list
->size
--;
}
void pop_front(List
* list
)
{
if (list
->size
== 0)
{
printf("链表个数为0无法删除!");
return;
}
Node
* s
= list
->first
->next
;
list
->first
->next
= s
->next
;
free(s
);
list
->size
--;
}
void sort(List
* list
)
{
if (list
->size
< 2)
{
printf("链表个数为小于2个,无法排序!");
return;
}
Node
* s
= list
->first
->next
;
Node
* p
= s
->next
;
list
->last
= s
;
list
->last
->next
= NULL;
while (p
!= NULL)
{
s
= p
;
p
= p
->next
;
Node
* q
= list
->first
;
while (q
->next
&& q
->next
->data
< s
->data
)
{
q
= q
->next
;
}
if (q
== list
->last
)
{
list
->last
= s
;
}
s
->next
= q
->next
;
q
->next
= s
;
}
}
void insert_val(List
* list
,ElemType num
)
{
Node
* p
= list
->first
;
while (p
->next
&& p
->next
->data
< num
)
{
p
= p
->next
;
}
Node
* s
= (Node
*)malloc(sizeof(Node
));
assert(s
!= NULL);
s
->data
= num
;
s
->next
= p
->next
;
p
->next
= s
;
}
void length(List
* list
)
{
printf("链表长度为:%d\n",list
->size
);
}
void reserve(List
* list
)
{
Node
* s
= list
->first
->next
;
Node
* p
= s
->next
;
list
->last
= s
;
list
->last
->next
= NULL;
while (p
)
{
s
= p
;
p
= p
->next
;
s
->next
= list
->first
->next
;
list
->first
->next
= s
;
}
}
int find(List
* list
, ElemType num
)
{
Node
* p
= list
->first
;
int count
= 0;
while (p
->next
)
{
if (p
->next
->data
== num
)
{
count
++;
}
p
= p
->next
;
}
if (count
== 0)
{
return -1;
}
else
{
return count
;
}
}
void clear(List
* list
)
{
Node
* p
= list
->first
->next
;
list
->last
= list
->first
;
list
->first
->next
= NULL;
Node
* s
= p
->next
;
while (s
)
{
free(p
);
p
= s
;
s
= s
->next
;
}
list
->size
= 0;
}
void delect_val(List
* list
, ElemType num
)
{
Node
* p
= list
->first
;
Node
* s
= p
->next
;
while (s
)
{
if (s
->data
== num
)
{
p
->next
= s
->next
;
free(s
);
list
->size
--;
}
p
= p
->next
;
s
= p
->next
;
}
}
路过的大神多指教,正在学数据结构
转载请注明原文地址: https://lol.8miu.com/read-11545.html