/*
2017年6月16日 09:13:09
2017年6月16日 09:13:09
数据结构(c)
创建非循环链表
(disunderstand 2)
*/
(disunderstand 2)
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node * pNext;
}NODE, *PNODE;
{
int data;
struct Node * pNext;
}NODE, *PNODE;
//函数声明
PNODE create_list(int len);//创建非循环链表
void traverse_list(PNODE pHead);//便历链表
bool find_list (PNODE pHead, int val, int loc);//在链表中第loc的地方查找是否有val这个值
bool insert_list (PNODE pHead, int val, int loc);//在链表中第loc的地方插入val这个值
bool is_empty(PNODE pHead);//判断链表是否为空
bool delete_list (PNODE pHead, int loc, int * val);//删除链表指定位置的值
void sort_list (PNODE pHead);//排序
int lenth_list (PNODE pHead);//求长度
//主函数
int main (void)
{
int val;
PNODE pHead = NULL;
pHead = create_list(5);
printf("\n便历链表\n");
traverse_list(pHead);
printf("\n查找链表中某个值\n");
if (find_list (pHead, 5, 3))
printf ("链表中有这个值\n");
else
printf ("链表中没有这个值\n");
void traverse_list(PNODE pHead);//便历链表
bool find_list (PNODE pHead, int val, int loc);//在链表中第loc的地方查找是否有val这个值
bool insert_list (PNODE pHead, int val, int loc);//在链表中第loc的地方插入val这个值
bool is_empty(PNODE pHead);//判断链表是否为空
bool delete_list (PNODE pHead, int loc, int * val);//删除链表指定位置的值
void sort_list (PNODE pHead);//排序
int lenth_list (PNODE pHead);//求长度
//主函数
int main (void)
{
int val;
PNODE pHead = NULL;
pHead = create_list(5);
printf("\n便历链表\n");
traverse_list(pHead);
printf("\n查找链表中某个值\n");
if (find_list (pHead, 5, 3))
printf ("链表中有这个值\n");
else
printf ("链表中没有这个值\n");
printf("\n删除链表中某个位置值\n");
delete_list (pHead, 3, &val);
delete_list (pHead, 3, &val);
printf("\n便历链表\n");
traverse_list(pHead);
//长度
int len = lenth_list (pHead);
printf ("\n长度:%d\n", len);
//排序
sort_list (pHead);
printf("\n排序\n");
traverse_list(pHead);
//插入
insert_list (pHead, 44, 3);
printf("\n插入\n");
traverse_list(pHead);
traverse_list(pHead);
//长度
int len = lenth_list (pHead);
printf ("\n长度:%d\n", len);
//排序
sort_list (pHead);
printf("\n排序\n");
traverse_list(pHead);
//插入
insert_list (pHead, 44, 3);
printf("\n插入\n");
traverse_list(pHead);
return 0;
}
//创建非循环链表
PNODE create_list(int len)
{
int i;
int val;
PNODE create_list(int len)
{
int i;
int val;
PNODE pHead = (PNODE) malloc (sizeof(NODE));
if (NULL == pHead)
{
printf ("内存分配失败\n");
exit (-1);
}
PNODE pTail = pHead;
pHead->pNext = NULL;
if (NULL == pHead)
{
printf ("内存分配失败\n");
exit (-1);
}
PNODE pTail = pHead;
pHead->pNext = NULL;
for (i = 0; i < len; ++i)
{
printf ("请输入第%d个节点的值: ", i + 1);
scanf ("%d", &val);
PNODE pNew = (PNODE) malloc (sizeof (NODE));
if (NULL == pNew)
{
printf ("内存分配失败\n");
exit (-1);
}
pNew ->data = val;
pTail -> pNext = pNew;
pNew -> pNext = NULL;
pTail = pNew;
{
printf ("请输入第%d个节点的值: ", i + 1);
scanf ("%d", &val);
PNODE pNew = (PNODE) malloc (sizeof (NODE));
if (NULL == pNew)
{
printf ("内存分配失败\n");
exit (-1);
}
pNew ->data = val;
pTail -> pNext = pNew;
pNew -> pNext = NULL;
pTail = pNew;
}
return pHead;
}
//便历链表
void traverse_list(PNODE pHead)
{
if (NULL == pHead ->pNext )
printf ("链表为空");
pHead = pHead->pNext ;
void traverse_list(PNODE pHead)
{
if (NULL == pHead ->pNext )
printf ("链表为空");
pHead = pHead->pNext ;
while (NULL != pHead)
{
printf (" %d ", pHead->data );
pHead = pHead->pNext ;
{
printf (" %d ", pHead->data );
pHead = pHead->pNext ;
}
printf ("\n");
printf ("\n");
return;
}
//查找链表中的某一个值
bool find_list (PNODE pHead, int val, int loc)
{
int i = 0;
int n = 1;
if (NULL == pHead ->pNext )
printf ("链表为空");
pHead = pHead->pNext ;
}
//查找链表中的某一个值
bool find_list (PNODE pHead, int val, int loc)
{
int i = 0;
int n = 1;
if (NULL == pHead ->pNext )
printf ("链表为空");
pHead = pHead->pNext ;
while (NULL != pHead)
{
if (n == loc)
{
if (val == pHead->data )
{
i = 1;
}
}
pHead = pHead->pNext ;
++n;
{
if (n == loc)
{
if (val == pHead->data )
{
i = 1;
}
}
pHead = pHead->pNext ;
++n;
}
if (1 == i)
return true;
else
return false;
if (1 == i)
return true;
else
return false;
}
//判断链表是否为空
bool is_empty(PNODE pHead)
{
if (NULL == pHead->pNext )
return true;
else
return false;
}
//删除链表指定位置的值(disunderstand 1)
bool delete_list (PNODE pHead, int loc, int * val)
{
int i = 0;
PNODE p = pHead;
while (NULL != p->pNext && i < loc - 1)
{
p = p->pNext ;
++i;
}
//判断链表是否为空
bool is_empty(PNODE pHead)
{
if (NULL == pHead->pNext )
return true;
else
return false;
}
//删除链表指定位置的值(disunderstand 1)
bool delete_list (PNODE pHead, int loc, int * val)
{
int i = 0;
PNODE p = pHead;
while (NULL != p->pNext && i < loc - 1)
{
p = p->pNext ;
++i;
}
if (i > loc - 1 || NULL == p->pNext )
return false;
PNODE q = p->pNext ;
*val = q->data ;
return false;
PNODE q = p->pNext ;
*val = q->data ;
p->pNext = p->pNext ->pNext ;
free(q);
q = NULL;
return true;
free(q);
q = NULL;
return true;
}
//排序
void sort_list (PNODE pHead)
{
PNODE m, n;
int t, i, j;
int len = lenth_list (pHead);
void sort_list (PNODE pHead)
{
PNODE m, n;
int t, i, j;
int len = lenth_list (pHead);
for (i = 0, m = pHead->pNext ; i < len - 1; i++, m = m ->pNext )
{
for(j = i + 1, n = m ->pNext ; j < len; j++, n = n ->pNext )
{
if (m->data > n->data )
{
t = m->data;
m->data = n->data;
n->data = t;
}
{
for(j = i + 1, n = m ->pNext ; j < len; j++, n = n ->pNext )
{
if (m->data > n->data )
{
t = m->data;
m->data = n->data;
n->data = t;
}
}
}
}
return;
}
//链表长度
int lenth_list (PNODE pHead)
{
int i = 0;
PNODE s = pHead->pNext ;
while (NULL != s)
{
i++;
s = s->pNext ;
}
//链表长度
int lenth_list (PNODE pHead)
{
int i = 0;
PNODE s = pHead->pNext ;
while (NULL != s)
{
i++;
s = s->pNext ;
}
return i;
}
return i;
}
//在链表中第loc的地方插入val这个值(disunderstand 2)
bool insert_list (PNODE pHead, int val, int loc)
{
int i = 0;
PNODE p = pHead;
bool insert_list (PNODE pHead, int val, int loc)
{
int i = 0;
PNODE p = pHead;
while (NULL != p && i < loc - 1)
{
p = p->pNext ;
++i;
}
if (i > loc -1 || NULL == p)
return false;
{
p = p->pNext ;
++i;
}
if (i > loc -1 || NULL == p)
return false;
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("分配失败\n");
exit(-1);
}
int n = 0;
pNew->data = val;
PNODE q = p->pNext ;
p->pNext = pNew;
pNew->pNext = q;
PNODE q = p->pNext ;
p->pNext = pNew;
pNew->pNext = q;
return true;
}