//C语言--数据结构--线性表 单链表 线性表的链式存储结构之一
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <malloc.h>
#include <windows.h>
using namespace std;
#define INIT_SIZE 10 //单链表默认初始化大小
#define LIST_INCREMENT 5 //单链表容量增量,容量不够使用malloc申请
typedef struct{
int *p; //单链表的第一个元素的地址
int length; //单链表所能容纳元素的个数
int count; //当前单链表有效元素的个数
}LinkList,*list;
bool initLinkList(LinkList *list);
bool append(LinkList *list,int value);
bool insert(LinkList *list,int value,int index);
bool remove(LinkList *list,int index);
bool isEmpty(LinkList *list);
bool isFull(LinkList *list);
void show(LinkList *list);
bool clear(LinkList *list);
//初始化单链表
bool initLinkList(LinkList *list){
list->p=(int *)malloc(sizeof(int)*INIT_SIZE);
if(list->p == NULL){
return false;
} else{
list->length=INIT_SIZE;
list->count=0;
return true;
}
}
//判断单链表是否为空
bool isEmpty(LinkList *list){
if(list->count==0){
return true;
} else{
return false;
}
}
//判断单链表是否为已满
bool isFull(LinkList *list){
if(list->count==list->length){
return true;
} else{
return false;
}
}
//输出单链表的全部元素
void show(LinkList *list){
if(isEmpty(list)){
printf("单链表为空!!!\n");
} else {
for(int i=0;i < list->count;i++){
printf("%d\n",list->p[i]);
}
}
}
//在单链表的末尾追加元素
bool append(LinkList *list,int value){
if(isFull(list)){
return false;
} else {
list->p[list->count]=value;
list->count++;
return true;
}
}
//在单链表的中间插入元素
bool insert(LinkList *list,int value,int index){
if(index<0 || index>list->count || index>list->length-1){
printf("索引下标越界!!!\n");
return false;
} else {
for(int i=list->count;i > index-1;i--){
list->p[i + 1]=list->p[i];
}
list->count++;
list->p[index]=value;
return true;
}
}
//移除选定位置的单链表的元素
bool remove(LinkList *list,int index){
if(index<0 || index>list->count-1){
return false;
} else {
for(int i=index;i < list->count;i++){
list->p[i]=list->p[i+1];
}
list->p[list->count-1]=NULL;
list->count--;
return true;
}
}
//清空单链表
bool clear(LinkList *list){
if(isEmpty(list)){
return true;
} else{
for(int i=0;i < list->count-1;i++){
list->p[i]=NULL;
}
list->count = 0;
return true;
}
}
void main(){
LinkList list;
initLinkList(&list);
append(&list,1);
append(&list,2);
append(&list,3);
append(&list,4);
append(&list,5);
append(&list,6);
append(&list,7);
append(&list,8);
append(&list,9);
append(&list,10);
cout << "--------------------------" <<endl;
show(&list);
insert(&list,100,4);
cout << "--------------------------" << endl;
show(&list);
remove(&list,3);
cout << "--------------------------" << endl;
show(&list);
clear(&list);
cout << "--------------------------" << endl;
show(&list);
system("pause");
}
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <malloc.h>
#include <windows.h>
using namespace std;
#define INIT_SIZE 10 //单链表默认初始化大小
#define LIST_INCREMENT 5 //单链表容量增量,容量不够使用malloc申请
typedef struct{
int *p; //单链表的第一个元素的地址
int length; //单链表所能容纳元素的个数
int count; //当前单链表有效元素的个数
}LinkList,*list;
bool initLinkList(LinkList *list);
bool append(LinkList *list,int value);
bool insert(LinkList *list,int value,int index);
bool remove(LinkList *list,int index);
bool isEmpty(LinkList *list);
bool isFull(LinkList *list);
void show(LinkList *list);
bool clear(LinkList *list);
//初始化单链表
bool initLinkList(LinkList *list){
list->p=(int *)malloc(sizeof(int)*INIT_SIZE);
if(list->p == NULL){
return false;
} else{
list->length=INIT_SIZE;
list->count=0;
return true;
}
}
//判断单链表是否为空
bool isEmpty(LinkList *list){
if(list->count==0){
return true;
} else{
return false;
}
}
//判断单链表是否为已满
bool isFull(LinkList *list){
if(list->count==list->length){
return true;
} else{
return false;
}
}
//输出单链表的全部元素
void show(LinkList *list){
if(isEmpty(list)){
printf("单链表为空!!!\n");
} else {
for(int i=0;i < list->count;i++){
printf("%d\n",list->p[i]);
}
}
}
//在单链表的末尾追加元素
bool append(LinkList *list,int value){
if(isFull(list)){
return false;
} else {
list->p[list->count]=value;
list->count++;
return true;
}
}
//在单链表的中间插入元素
bool insert(LinkList *list,int value,int index){
if(index<0 || index>list->count || index>list->length-1){
printf("索引下标越界!!!\n");
return false;
} else {
for(int i=list->count;i > index-1;i--){
list->p[i + 1]=list->p[i];
}
list->count++;
list->p[index]=value;
return true;
}
}
//移除选定位置的单链表的元素
bool remove(LinkList *list,int index){
if(index<0 || index>list->count-1){
return false;
} else {
for(int i=index;i < list->count;i++){
list->p[i]=list->p[i+1];
}
list->p[list->count-1]=NULL;
list->count--;
return true;
}
}
//清空单链表
bool clear(LinkList *list){
if(isEmpty(list)){
return true;
} else{
for(int i=0;i < list->count-1;i++){
list->p[i]=NULL;
}
list->count = 0;
return true;
}
}
void main(){
LinkList list;
initLinkList(&list);
append(&list,1);
append(&list,2);
append(&list,3);
append(&list,4);
append(&list,5);
append(&list,6);
append(&list,7);
append(&list,8);
append(&list,9);
append(&list,10);
cout << "--------------------------" <<endl;
show(&list);
insert(&list,100,4);
cout << "--------------------------" << endl;
show(&list);
remove(&list,3);
cout << "--------------------------" << endl;
show(&list);
clear(&list);
cout << "--------------------------" << endl;
show(&list);
system("pause");
}