赞
踩
- # include <stdio.h>
- # include <malloc.h>
- # include <stdlib.h>
- //线性链表模拟
-
- /*
- 只是单纯的模拟练习一下,没有检查健壮性,这可能是一个漏洞百出的程序。
- */
-
- typedef struct Node
- {
- int data;
- struct Node * pNode;
- }NODE,* PNODE;
-
-
- PNODE create_list(int/*链表的长度,链表的值默认为0*/);//创建一个链表
-
- void show_list(PNODE/*链表头指针地址*/);//遍历一个链表并打印输出
-
- bool is_empty(PNODE/*链表头指针地址*/);//判断链表是否为空
-
- bool insert_val(PNODE/*链表头指针地址*/,int/*值*/);//给链表赋值
-
- int len_list(PNODE/*链表头指针地址*/);//判断链表的长度
-
- bool del_val(PNODE/*链表头指针地址*/,int/*要删除的值*/,int * /*将删除的值返回给此地址指向的变量*/);//删除某一个值
-
- void sort_list(PNODE/*链表头指针地址*/);//链表排序
-
- void sort_list2(PNODE/*链表头指针地址*/);//链表排序2
-
- bool expand_list(PNODE/*链表头指针地址*/,int/*索引位置*/,int/*要插入的值*/);//在链表的指定位置扩充一个链表元素。
-
- int get_val(PNODE/*链表头指针地址*/,int/*索引位置*/);//获取特定索引位置的链表的值。
-
- int main(void)//测试链表
- {
- int pval = NULL;
- PNODE p = create_list(6);
- insert_val(p,35);
- insert_val(p,22);
- insert_val(p,67);
- insert_val(p,89);
- insert_val(p,65);
- insert_val(p,90);
- expand_list(p,6,11);
- //sort_list2(p);
- show_list(p);
- printf("长度:%d\n",len_list(p));
- printf("%d\n",get_val(p,2));
- return 0;
- }
-
- PNODE create_list(int len)//创建一个链表
- {
- PNODE pn = NULL;
- PNODE pt = NULL;
- int i;
-
- pn = (PNODE)malloc(sizeof(NODE));
- pt = pn;
- for(i=0;i<len;i++)
- {
- pt->pNode = (PNODE)malloc(sizeof(NODE));
- pt = pt->pNode;
- pt->data = NULL;
- pt->pNode = NULL;
-
- }
-
- return pn;
- }
-
- void show_list(PNODE Pnode)//遍历一个链表并打印输出
- {
- PNODE t;
- t = Pnode->pNode;
- while(NULL != t)
- {
- printf("%d\n",t->data);
- t = t->pNode;
- }
- }
-
- bool is_empty(PNODE pn)//判断链表是否为空
- {
- if(NULL == pn || NULL == pn->pNode) return true;
- return false;
- }
-
- int len_list(PNODE pn)//判断链表的长度
- {
- int cnt=0;
- pn = pn->pNode;
- while(NULL!=pn)
- {
- cnt++;
- pn = pn->pNode;
- }
-
- return cnt;
- }
-
-
- bool insert_val(PNODE pn,int val)//给链表赋值
- {
- int len = len_list(pn);
- pn = pn->pNode;
- if(pn->data==NULL)
- {
- pn->data = val;
- return true;
- }
- else
- {
- int i = 0;
- while(NULL != pn->data && NULL != pn->pNode)
- {
- i++;
-
- pn = pn->pNode;
- }
- if(NULL == pn->data)
- {
- pn->data = val;
- return true;
- }
- }
- return false;
- }
-
- bool del_val(PNODE pn,int val,int * pdel_val)//删除某一个值
- {
- PNODE pt = pn;
- pn = pn->pNode;
- while(NULL!=pn->data&&NULL!=pn->pNode)
- {
- if(pn->data==val)
- {
- *pdel_val = pn->data;
- break;
- }
- pt = pn;
- pn = pn->pNode;
- }
- if(pn->pNode==NULL&& *pdel_val == NULL) return false;
- pt->pNode = pn->pNode;
- free(pn);
- return true;
- }
-
- void sort_list(PNODE pn)//链表排序
- {
- int temp;
- PNODE pt = NULL;
- pn = pn->pNode;
- pt = pn->pNode;
- while(pn->pNode!=NULL&&pn->pNode->pNode!=NULL)
- {
- pt = pn->pNode;
- while(pt->pNode!=NULL)
- {
- if(pn->data>pt->data)
- {
- temp = pn->data;
- pn->data = pt->data;
- pt->data = temp;
- }
- pt = pt->pNode;
- }
- pn = pn->pNode;
- }
- }
-
- void sort_list2(PNODE pn)//链表排序2
- {
- PNODE p1 = NULL,p2=NULL;
- int pt;
- for(p1 = pn->pNode;p1->pNode!=NULL;p1=p1->pNode)
- {
- for(p2=p1->pNode;p2->pNode!=NULL&&p2!=NULL;p2=p2->pNode)
- {
- if(p1->data>p2->data)
- {
- pt=p1->data;
- p1->data=p2->data;
- p2->data=pt;
- }
- }
- }
-
-
- }
-
- bool expand_list(PNODE pn,int index,int val)//在链表的指定位置扩充一个链表元素。
- {
- int i = 1;
- PNODE p1 = pn;
-
- if(index>0&&index<=len_list(pn))
- {
- for(p1 = pn->pNode;i<index&&p1!=NULL;p1=p1->pNode,pn=pn->pNode) i++;
- pn->pNode = (PNODE)malloc(sizeof(NODE));
- pn->pNode->data = val;
- pn->pNode->pNode = p1;
- return true;
- }
- return false;
-
-
- }
-
- int get_val(PNODE pn,int index)//获取特定索引位置的链表的值。
- {
- int i = 1;
- PNODE p1 = pn;
- if(index>0&&index<=len_list(pn))
- {
- for(p1 = pn->pNode;i<index&&p1!=NULL;p1=p1->pNode,pn=pn->pNode) i++;
- return p1->data;
- }
- printf("没有找到指定的值。\n");
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。