说明
- 按照序号从头向下看即可,功能在标题里,具体构造方法以及说明在注释里面
- 这只是构建链表的其中一种方法
- 其中代码构建的均为单链表
- 3号是基本的链表,不带其他多余功能
- 8号是加上所有功能后的链表示例
- 这个只能算是示例以及练习的代码,使用的时候还需要修改
- 而且没有做容错!没有做容错!没有做容错!
- 只是单纯得想展示一下怎么去构建一个基本的链表
- 实话实说,这个代码有点憨批,但是应该比较适合初学者来看一看
- 还有就是如果有错误以及可以进一步改进的方法,还请提出来,万分感谢Orz
具体代码
1号 单主程序无函数单链表
#include <stdio.h>
#include <malloc.h>
typedef struct _list
{
int data;
struct _list *next;
}Shop;
int main()
{
int line[10];
int i = 0;
Shop *Lhead = NULL;
printf("***************************************************");
printf("\n请输入四个数字:");
for (i = 0; i < 4; i++)
{
scanf("%d", &line[i]);
}
for (i = 0; i < 4; i++)
{
Shop *p = (Shop*)malloc(sizeof(Shop));
p->data = line[i];
p->next = NULL;
Shop *last = Lhead;
if(last)
{
while(last->next)
{
last = last->next;
}
last->next = p;
}
else
{
Lhead = p;
}
}
while (Lhead)
{
printf("%d ", Lhead->data);
Lhead = Lhead->next;
}
return 0;
}
2号 函数:制造,全部打印,单链表,初级
#include <stdio.h>
#include <malloc.h>
typedef struct _list
{
int data;
struct _list *next;
}Shop;
void creat(Shop *&list, int a);
void printall(Shop *&list);
int main()
{
int i = 0;
int line[100];
Shop *head = NULL;
printf("******************************************");
printf("\n请输入四个数字:");
for(i = 0; i < 4; i++)
{
scanf("%d", &line[i]);
}
for(i = 0; i < 4; i++)
{
creat(head, line[i]);
}
printall(head);
return 0;
}
void creat(Shop *&list, int a)
{
Shop *p = (Shop*)malloc(sizeof(Shop));
p->data = a;
p->next = NULL;
Shop *last = list;
if(last)
{
while (last->next)
{
last = last->next;
}
last->next = p;
}
else
list = p;
}
void printall(Shop *&list)
{
Shop *last = list;
while(last)
{
printf("%d ", last->data);
last = last->next;
}
}
3号 函数:制造,全部打印,单链表,二级
#include <stdio.h>
#include <malloc.h>
typedef struct _list
{
int data;
struct _list *next;
}Shop;
typedef struct list
{
Shop *head;
}List;
void creat(List *plist, int a);
void printall(List *plist);
int main()
{
int i = 0;
int line[100];
List list;
list.head = NULL;
printf("*************************************");
printf("\n请输入四个数字: ");
for(i = 0; i < 4; i++)
{
scanf("%d", &line[i]);
}
for(i = 0; i < 4; i++)
{
creat(&list, line[i]);
}
printall(&list);
return 0;
}
void creat(List *plist, int a)
{
Shop *p = (Shop*)malloc(sizeof(Shop));
p->data = a;
p->next = NULL;
Shop *last = plist->head;
if(last)
{
while (last->next)
{
last = last->next;
}
last->next = p;
}
else
{
plist->head = p;
}
}
void printall(List *plist)
{
Shop *last = plist->head;
while (last)
{
printf("%d ", last->data);
last = last->next;
}
}
4号 函数:制造,全部打印,单链表,三级
#include <stdio.h>
#include <malloc.h>
typedef struct _list
{
int data;
struct _list *next;
}Shop;
typedef struct list
{
Shop *head;
Shop *tail;
}List;
void creat(List *plist, int a);
void printall(List *plist);
int main()
{
int i = 0;
int line[100];
List list;
list.head = list.tail = NULL;
printf("*************************************");
printf("\n请输入四个数字: ");
for(i = 0; i < 4; i++)
{
scanf("%d", &line[i]);
}
for(i = 0; i < 4; i++)
{
creat(&list, line[i]);
}
printall(&list);
return 0;
}
void creat(List *plist, int a)
{
Shop *p = (Shop*)malloc(sizeof(Shop));
p->data = a;
p->next = NULL;
Shop *last = plist->tail;
if(last)
{
last->next = p;
plist->tail = p;
}
else
{
plist->head = p;
plist->tail = p;
}
}
void printall(List *plist)
{
Shop *last = plist->head;
while (last)
{
printf("%d ", last->data);
last = last->next;
}
}
5号 函数:制造,全部打印,time记数,单链表
- 实话实说,这个是所有代码的里面我觉得写的最失败的一个,没有实用性,最多记个数,实属憨憨。
#include <stdio.h>
#include <malloc.h>
typedef struct _list
{
int data;
int time;
struct _list *next;
}Shop;
typedef struct list
{
Shop *head;
Shop *tail;
}List;
void creat(List *plist, int a);
void printall(List *plist);
int main()
{
int i = 0;
int line[100];
List list;
list.head = list.tail = NULL;
printf("*************************************");
printf("\n请输入四个数字: ");
for(i = 0; i < 4; i++)
{
scanf("%d", &line[i]);
}
for(i = 0; i < 4; i++)
{
creat(&list, line[i]);
}
printf("链表内的数据为:\n");
printall(&list);
return 0;
}
void creat(List *plist, int a)
{
Shop *last = plist->tail;
Shop *p = (Shop*)malloc(sizeof(Shop));
p->data = a;
p->next = NULL;
if(last == NULL)
p->time = 0;
else
p->time = last->time + 1;
if(last)
{
last->next = p;
plist->tail = p;
}
else
{
plist->head = p;
plist->tail = p;
}
}
void printall(List *plist)
{
Shop *last = plist->head;
while (last)
{
printf("%d %d\n", last->data, last->time);
last = last->next;
}
}
6号 函数:制造,全部打印,记数打印,查找,单链表
#include <stdio.h>
#include <malloc.h>
typedef struct _list
{
int data;
struct _list *next;
}Shop;
typedef struct list
{
Shop *head;
Shop *tail;
}List;
void creat(List *plist, int a);
void printall(List *plist);
void printtime(List *plist, int time);
int main()
{
int i = 0;
int line[100];
int time = 0;
List list;
list.head = list.tail = NULL;
printf("**********************************************************************");
printf("\n请输入四个数字: ");
for(i = 0; i < 4; i++)
{
scanf("%d", &line[i]);
}
for(i = 0; i < 4; i++)
{
creat(&list, line[i]);
}
printf("**********************************************************************");
printf("\n请输入所需打印的数据节点是第几个(节点次序从0开始):");
scanf("%d", &time);
printtime(&list, time);
printf("**********************************************************************");
printf("\n链表中的所有数据以及它所对应的节点的次序:");
printall(&list);
return 0;
}
void creat(List *plist, int a)
{
Shop *p = (Shop*)malloc(sizeof(Shop));
p->data = a;
p->next = NULL;
Shop *last = plist->tail;
if(last)
{
last->next = p;
plist->tail = p;
}
else
{
plist->head = p;
plist->tail = p;
}
}
void printall(List *plist)
{
Shop *last = plist->head;
int i = 0;
while (last)
{
printf("\n%d %d", last->data, i++);
last = last->next;
}
}
void printtime(List *plist, int time)
{
int i = 0;
Shop *last = plist->head;
for(i = 0; i < time; i++)
{
last = last->next;
}
printf("\n第%d个节点的数据是:%d\n", time, last->data);
}
7号 函数:制造,全部打印,记数打印,查找,删除,插入,单链表
#include <stdio.h>
#include <malloc.h>
typedef struct _list
{
int data;
struct _list *next;
}Shop;
typedef struct list
{
Shop *head;
Shop *tail;
}List;
void creat(List *plist, int a);
void printall(List *plist);
void printtime(List *plist, int time);
void deletetime(List *plist, int time);
void inserttime(List *plist, int time, int a);
int main()
{
int i = 0;
int line[100];
int data_in = 0;
int time = 0;
int time_2 = 0;
int time_3 = 0;
List list;
list.head = list.tail = NULL;
printf("**********************************************************************");
printf("\n请输入四个数字: ");
for(i = 0; i < 4; i++)
{
scanf("%d", &line[i]);
}
for(i = 0; i < 4; i++)
{
creat(&list, line[i]);
}
printf("**********************************************************************");
printf("\n请输入所需打印的数据节点是第几个(节点次序从0开始):");
scanf("%d", &time);
printtime(&list, time);
printf("**********************************************************************");
printf("\n链表中的所有数据以及它所对应的节点的次序:");
printall(&list);
printf("\n**********************************************************************");
printf("\n请输入所需删除的数据节点是第几个(节点次序从0开始):");
scanf("%d", &time_2);
deletetime(&list, time_2);
printf("**********************************************************************");
printf("\n删除相关节点后当前链表中的所有数据以及它所对应的节点的次序:");
printall(&list);
printf("\n**********************************************************************");
printf("\n请输入所需插入的数据节点位置(节点次序从0开始):");
scanf("%d", &time_3);
printf("\n请输入所需插入的数据:");
scanf("%d", &data_in);
inserttime(&list, time_3, data_in);
printf("**********************************************************************");
printf("\n插入相关节点后当前链表中的所有数据以及它所对应的节点的次序:");
printall(&list);
return 0;
}
void creat(List *plist, int a)
{
Shop *p = (Shop*)malloc(sizeof(Shop));
p->data = a;
p->next = NULL;
Shop *last = plist->tail;
if(last)
{
last->next = p;
plist->tail = p;
}
else
{
plist->head = p;
plist->tail = p;
}
}
void printall(List *plist)
{
Shop *last = plist->head;
int i = 0;
while (last)
{
printf("\n%d %d", last->data, i++);
last = last->next;
}
}
void printtime(List *plist, int time)
{
int i = 0;
Shop *last = plist->head;
for(i = 0; i < time; i++)
{
last = last->next;
}
printf("\n第%d个节点的数据是:%d\n", time, last->data);
}
void deletetime(List *plist, int time)
{
int i = 0;
Shop *before = plist->head;
Shop *behind = plist->head;
if(time == 0)
{
plist->head = before->next;
free(before);
}
else
{
for(i = 0; i < time - 1; i++)
{
before = before->next;
}
for(i = 0; i < time; i++)
{
behind = behind->next;
}
before->next = behind->next;
free(behind);
}
}
void inserttime(List *plist, int time, int a)
{
int i = 0;
Shop *p = (Shop*)malloc(sizeof(Shop));
p->data = a;
p->next = NULL;
Shop *before = plist->head;
Shop *behind = plist->head;
if(time == 0)
{
plist->head = p;
p->next = before->next;
}
else
{
for(i = 0; i < time - 1; i++)
{
before = before->next;
}
for(i = 0; i < time; i++)
{
behind = behind->next;
}
before->next = p;
p->next = behind;
}
}
8号 函数:制造,全部打印,记数打印,查找,删除对应节点,单链表
#include <stdio.h>
#include <malloc.h>
typedef struct _list
{
int data;
struct _list *next;
}Shop;
typedef struct list
{
Shop *head;
Shop *tail;
}List;
void creat(List *plist, int a);
void printall(List *plist);
void printtime(List *plist, int time);
void deletetime(List *plist, int time);
int main()
{
int i = 0;
int line[100];
int time = 0;
int time_2 = 0;
List list;
list.head = list.tail = NULL;
printf("**********************************************************************");
printf("\n请输入四个数字: ");
for(i = 0; i < 4; i++)
{
scanf("%d", &line[i]);
}
for(i = 0; i < 4; i++)
{
creat(&list, line[i]);
}
printf("**********************************************************************");
printf("\n请输入所需打印的数据节点是第几个(节点次序从0开始):");
scanf("%d", &time);
printtime(&list, time);
printf("**********************************************************************");
printf("\n链表中的所有数据以及它所对应的节点的次序:");
printall(&list);
printf("\n**********************************************************************");
printf("\n请输入所需删除的数据节点是第几个(节点次序从0开始):");
scanf("%d", &time_2);
deletetime(&list, time_2);
printf("**********************************************************************");
printf("\n删除相关节点后当前链表中的所有数据以及它所对应的节点的次序:");
printall(&list);
return 0;
}
void creat(List *plist, int a)
{
Shop *p = (Shop*)malloc(sizeof(Shop));
p->data = a;
p->next = NULL;
Shop *last = plist->tail;
if(last)
{
last->next = p;
plist->tail = p;
}
else
{
plist->head = p;
plist->tail = p;
}
}
void printall(List *plist)
{
Shop *last = plist->head;
int i = 0;
while (last)
{
printf("\n%d %d", last->data, i++);
last = last->next;
}
}
void printtime(List *plist, int time)
{
int i = 0;
Shop *last = plist->head;
for(i = 0; i < time; i++)
{
last = last->next;
}
printf("\n第%d个节点的数据是:%d\n", time, last->data);
}
void deletetime(List *plist, int time)
{
int i = 0;
Shop *before = plist->head;
Shop *behind = plist->head;
if(time == 0)
{
plist->head = before->next;
plist->tail = before->next;
free(before);
}
else
{
for(i = 0; i < time - 1; i++)
{
before = before->next;
}
for(i = 0; i < time; i++)
{
behind = behind->next;
}
before->next = behind->next;
free(behind);
}
}