拥有删除,增加,排序等功能的链表
来源:互联网 发布:win10壁纸windows聚焦 编辑:程序博客网 时间:2024/05/17 04:53
#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
struct node //创建结构体及其成员
{ int num;
char name[20];
struct node * next;
};
{ int num;
char name[20];
struct node * next;
};
typedef struct node Node;
typedef struct node * Link;
typedef struct node * Link;
void creat_link (Link * head) //创建链表函数(空链表)
{
*head = NULL;
}
void all_malloc_ok (Link new_node) //分配空间函数
{
if (new_node == NULL)
{
printf("Fail!");
exit(-1);
}
{
*head = NULL;
}
void all_malloc_ok (Link new_node) //分配空间函数
{
if (new_node == NULL)
{
printf("Fail!");
exit(-1);
}
}
Link creat_new_node(Link *new_node) //创建新结点函数
{
*new_node = (Link)malloc(sizeof(Node));
Link creat_new_node(Link *new_node) //创建新结点函数
{
*new_node = (Link)malloc(sizeof(Node));
all_malloc_ok (*new_node);
}
void display (Link head) //输出函数
{
Link p;
p = head;
{
Link p;
p = head;
if ( p == NULL)
{
printf("The link is empty!");
return ;
}
{
printf("The link is empty!");
return ;
}
while (p != NULL)
{
printf("%4d:",p->num);
printf("%s\n",p->name);
p = p -> next;
}
}
{
printf("%4d:",p->num);
printf("%s\n",p->name);
p = p -> next;
}
}
void insert_new_node_tail (Link *head, Link new_node) //插入函数,将新节点用尾插法插入
{
Link p;
p = *head;
{
Link p;
p = *head;
if ( *head == NULL)
{
*head = new_node;
(*head)->next = NULL;
}
else
{
while ( p ->next != NULL)
{
p = p -> next;
}
p -> next = new_node;
new_node -> next = NULL;
{
*head = new_node;
(*head)->next = NULL;
}
else
{
while ( p ->next != NULL)
{
p = p -> next;
}
p -> next = new_node;
new_node -> next = NULL;
}
}
}
void release (Link *head) //将分配的空间释放
{
Link p;
p = *head;
while (*head != NULL)
{
p = *head;
*head = (*head) -> next;
free (p);
}
}
int count (Link head) //统计所有的结点的函数
{
Link p;
p = head;
int n = 1;
{
Link p;
p = head;
int n = 1;
while ( p->next != NULL)
{
p = p->next;
n++;
}
return n;
}
{
p = p->next;
n++;
}
return n;
}
Link search (Link head,int n) //搜索函数,输入成员num值,寻找所在地址
{
Link p;
p = head;
while (p != NULL)
{
if ( p->num == n)
{
break;
}
p = p->next;
}
return p;
}
Link search_delete (Link head,int n) //上一个函数的前一个结点的地址
{
Link p;
p = head;
Link q ;
q = head;
while (p != NULL)
{
if( p->num == n)
{
break;
}
q = p;
p = p->next;
}
return q;
}
/*void modifier (Link p)
{
scanf("%s",p->name);
printf("\n");
}*/
{
Link p;
p = head;
while (p != NULL)
{
if ( p->num == n)
{
break;
}
p = p->next;
}
return p;
}
Link search_delete (Link head,int n) //上一个函数的前一个结点的地址
{
Link p;
p = head;
Link q ;
q = head;
while (p != NULL)
{
if( p->num == n)
{
break;
}
q = p;
p = p->next;
}
return q;
}
/*void modifier (Link p)
{
scanf("%s",p->name);
printf("\n");
}*/
void delete1 (Link *head, int n) //删除函数,注意:delete 不能作为函数名
{
Link p ;
p = search (*head,n);
if(p == NULL)
{
printf("没有这个值");
}
else if (p == *head)
{
*head = (*head)->next;
free (p);
}
else if ((p->next) == NULL)
{
search_delete(*head,n)->next = NULL;
free(p);
}
else
{
( search_delete(*head,n))->next = p ->next;
free (p);
}
}
void plus_node (Link *head, int n) //加入结点函数,将结点放在你想放置的结点前面
{
Link p;
Link new_node;
{
Link p ;
p = search (*head,n);
if(p == NULL)
{
printf("没有这个值");
}
else if (p == *head)
{
*head = (*head)->next;
free (p);
}
else if ((p->next) == NULL)
{
search_delete(*head,n)->next = NULL;
free(p);
}
else
{
( search_delete(*head,n))->next = p ->next;
free (p);
}
}
void plus_node (Link *head, int n) //加入结点函数,将结点放在你想放置的结点前面
{
Link p;
Link new_node;
creat_new_node(&new_node);
new_node->num = 7;
printf("输入新结点的名字");
scanf("%s",new_node->name);
new_node->num = 7;
printf("输入新结点的名字");
scanf("%s",new_node->name);
p = search(*head,n);
if(*head == NULL)
{
*head = new_node;
}
else if (p == NULL)
{
printf("Fail!");
}
else if (p == *head)
{
new_node->next = *head;
*head = new_node;
}
else
{
search_delete(*head,n)->next = new_node;
new_node->next = p;
}
if(*head == NULL)
{
*head = new_node;
}
else if (p == NULL)
{
printf("Fail!");
}
else if (p == *head)
{
new_node->next = *head;
*head = new_node;
}
else
{
search_delete(*head,n)->next = new_node;
new_node->next = p;
}
}
void inverted_order (Link *head) //逆序函数,将所有结点按相反的顺序排放
{
Link p;
p = *head;
Link p1;
Link p2;
Link p3;
p1 = p->next;
p2 = p1->next;
p3 = p2->next;
if ( p == NULL)
{
printf("Fail!\n");
}
else if (p->next == NULL)
{
printf("There is only one node.\n");
}
else if (p1->next == NULL)
{
p1->next = p;
p->next = NULL;
*head = p1;
}
else if (p2->next == NULL)
{
p1->next = p;
p2->next = p1;
p->next = NULL;
*head = p2;
}
else
{
while (p3->next != NULL)
{
p1->next = p;
p2->next = p1;
p = p1;
p1 = p2;
p2 = p3;
p3 = p3->next;
}
p1->next = p;
p2->next = p1;
p3->next = p2;
(*head)->next = NULL;
*head = p3;
}
{
Link p;
p = *head;
Link p1;
Link p2;
Link p3;
p1 = p->next;
p2 = p1->next;
p3 = p2->next;
if ( p == NULL)
{
printf("Fail!\n");
}
else if (p->next == NULL)
{
printf("There is only one node.\n");
}
else if (p1->next == NULL)
{
p1->next = p;
p->next = NULL;
*head = p1;
}
else if (p2->next == NULL)
{
p1->next = p;
p2->next = p1;
p->next = NULL;
*head = p2;
}
else
{
while (p3->next != NULL)
{
p1->next = p;
p2->next = p1;
p = p1;
p1 = p2;
p2 = p3;
p3 = p3->next;
}
p1->next = p;
p2->next = p1;
p3->next = p2;
(*head)->next = NULL;
*head = p3;
}
}
void insert_sort(Link *head, Link new_node) //创建节点,并有序的放在链表里, (原来的链表是有序的)
{
Link p;
p = *head;
int number = new_node->num;
if (*head == NULL)
{
*head = new_node;
}
else if (number <= (p->num))
{
new_node->next = *head;
*head = new_node;
}
else if (number > (p->num))
{
while (p !=NULL)
{
if (p->next == NULL)
{
p->next = new_node;
new_node->next = NULL;
break;
}
else if (number <= ((p->next)->num))
{
new_node->next = p->next;
p->next = new_node;
break;
}
else if (number > ((p->next)->num))
{
p = p->next;
}
}
}
void insert_sort(Link *head, Link new_node) //创建节点,并有序的放在链表里, (原来的链表是有序的)
{
Link p;
p = *head;
int number = new_node->num;
if (*head == NULL)
{
*head = new_node;
}
else if (number <= (p->num))
{
new_node->next = *head;
*head = new_node;
}
else if (number > (p->num))
{
while (p !=NULL)
{
if (p->next == NULL)
{
p->next = new_node;
new_node->next = NULL;
break;
}
else if (number <= ((p->next)->num))
{
new_node->next = p->next;
p->next = new_node;
break;
}
else if (number > ((p->next)->num))
{
p = p->next;
}
}
}
}
int main ()
{
Link head = NULL;
Link new_node = NULL;
int i;
int n;
creat_link(&head);
int main ()
{
Link head = NULL;
Link new_node = NULL;
int i;
int n;
creat_link(&head);
for (i = 1; i < 5; i++)
{
creat_new_node (&new_node);
printf("输入第%d个名字:",i);
scanf("%s",new_node->name);
new_node -> num = i;
insert_new_node_tail (&head, new_node);
}
// display (head);
printf("有%d个结点.\n",count(head));
printf("输入结点中成员num的值(查找名字):");
scanf("%d",&n);
if (search(head,n) == NULL)
printf("没有这个数。");
else
printf("%d : %s\n",n, search(head,n)->name);
printf("输入需要删除的成员num的值:");
scanf("%d",&n);
delete1 (&head,n);
display (head);
// printf("输入一个值,加入一个结点:");
// scanf("%d",&n);
// plus_node(&head,n);
// display(head);
// inverted_order (&head);
{
creat_new_node (&new_node);
printf("输入第%d个名字:",i);
scanf("%s",new_node->name);
new_node -> num = i;
insert_new_node_tail (&head, new_node);
}
// display (head);
printf("有%d个结点.\n",count(head));
printf("输入结点中成员num的值(查找名字):");
scanf("%d",&n);
if (search(head,n) == NULL)
printf("没有这个数。");
else
printf("%d : %s\n",n, search(head,n)->name);
printf("输入需要删除的成员num的值:");
scanf("%d",&n);
delete1 (&head,n);
display (head);
// printf("输入一个值,加入一个结点:");
// scanf("%d",&n);
// plus_node(&head,n);
// display(head);
// inverted_order (&head);
// display (head);
for (i = 0; i < 3; i++)
{
new_node = creat_new_node(&new_node);
printf("输入插入的第%d个结点的num的值:\n",i + 1);
scanf("%d",&new_node->num);
printf("输入插入的第%d个结点的name的值:\n",i + 1);
scanf("%s",new_node->name);
insert_sort(&head,new_node);
}
display(head);
release(&head);
return 0;
}
for (i = 0; i < 3; i++)
{
new_node = creat_new_node(&new_node);
printf("输入插入的第%d个结点的num的值:\n",i + 1);
scanf("%d",&new_node->num);
printf("输入插入的第%d个结点的name的值:\n",i + 1);
scanf("%s",new_node->name);
insert_sort(&head,new_node);
}
display(head);
release(&head);
return 0;
}
0 0
- 拥有删除,增加,排序等功能的链表
- 双向循环链表函数(有删除,增加,排序,统计等功能)
- 使用javascript操作多选列表框,实现动态增加删除,左右移动,上下排序移动等功能。
- 链表的插入、删除、排序、追加等源码
- C语言实现链表的创建、增加、删除、查询、逆序、清空等基本操作
- java实现单链表的初始化,创建,删除,插入,查找,排序,同项删除,退出等功能
- jqgrid 实现增加,删除,修改的功能
- GridView的编辑、增加、删除功能
- FMDB增加修改删除功能的实现
- 链表的java实现以及基本的增加,删除,排序操作
- 括链表的创建,增加、删除节点,链表的逆序、排序和销毁
- iReport增加中文的黑体等艺术字体等功能
- 以较少代码实现DataGrid的排序,翻页,删除等功能 【1】
- 以较少代码实现DataGrid的排序,翻页,删除等功能【2】
- angular做的一个表单带删除排序,搜索等功能
- 链表节点的增加和删除
- angularJs 增加 删除 排序
- 使用JAVA代码来模拟线性链表的相关操作(增加,删除,插入及查找等)
- jdbc连接数据库
- 进程与线程
- Docker的性能损耗:以基因组分析流程为例
- 可以加载本地图片和网络资源的轮播图:TuTu
- jws jax-ws jax-rs jaxb cxf axis2 关系
- 拥有删除,增加,排序等功能的链表
- 毕业季
- Eclipse与C/C++代码阅读
- myeclipse项目上出现红色感叹号
- PHP与Java Web开发
- 反射5
- svn commit 出错
- 《DOOM 启世录》
- 年鉴 2013