一言难尽啊。。。
最近发现一个怪现象。。。浙大门口斑马线的红绿灯是只显示红灯的。。。绿灯的时候是全黑的。。。难道是培养耐心!!!
Link.cpp文件(这个文件主要用来测试链表增删查改函数):
#include<stdio.h>
#include"link.h"
int main()


{
int i;

ptonode L[100],*L0;

List l;

initlist(&l);//函数初始化

for(i=10;i>=0;i--)//appendnode函数
appendnode(&l,i);

printlist(&l);//printlist函数

/**//* sortlist(&l,L);

for(i=0;i<NodeCount(&l);i++)
printf("%d ",L[i]->data);
printf("\n");*/

L0=sortlist0(&l);
for(i=0;i<NodeCount(&l);i++)
printf("%d ",L0[i]->data);
printf("\n");
// printf("\n");

/**//* int Insertnumber,Index;//insertnode函数测试
while(1)
{
printf("Insertnumber and Index:\n");
scanf("%d %d",&Insertnumber,&Index);

insertnode(&l,Index,Insertnumber);
printlist(&l);
}

int deletenumberindex;
while(1)
{
printf("deletenumberindex:\n");
scanf("%d",&deletenumberindex);

deletenode(&l,deletenumberindex);
printlist(&l);
}*/


/**//* int *p;//地址值++是加上指针所指向数据类型大小
int a[10]={0,1,2,3,4,5,6,7,8,9};
p=a;
printf("%d\n",p);
p++;
printf("%d\n",p);
return 0;*/
return 0;
}
Link1.cpp文件(函数定义):
#include<stdio.h>
#include"link.h"
#include<stdlib.h>
#include<string.h>
static ptonode locatepos(List *l,int index)//查找节点。。


{
ptonode pnode=*l;
int i=0;
while(pnode!=NULL)

{
i++;
if(i==index)
return pnode;
pnode=pnode->next;
}
return pnode;
}


ptonode findnode(List* l,elementtype data)//查找节点


{
ptonode pnode=*l;
while(pnode!=NULL)

{
if(pnode->data=data)
return pnode;
pnode=pnode->next;
}
return pnode;
}

static ptonode createnode(elementtype data)//构建一个节点


{
ptonode pnode;
pnode=(ptonode)malloc(sizeof(Node));
pnode->data=data;
pnode->next=NULL;
return pnode;
}

ptonode findlast(List* l)//查找最后一个节点


{
ptonode pnode=*l;
if(*l==NULL)
return *l;
while(pnode->next!=NULL)
pnode=pnode->next;
return pnode;
}

void initlist(List* l)//初始化虽然只有一句代码,但是指针作为参数传递需要掌握。。。而且这里比较很难理解


{
//to-do
*l=NULL;
}
void appendnode(List* l,elementtype data)//最后位置插入节点


{
//to-do
ptonode pnode,pprev;
pnode=createnode(data);
pprev=findlast(l);
if(pprev==NULL)
*l=pnode;
else
pprev->next=pnode;
}

int NodeCount(List *l)//节点计数


{
ptonode pnode=*l;
int count=0;
while(pnode!=NULL)

{
count++;
pnode=pnode->next;
}
return count;
}

void insertnode(List* l,int index,elementtype data)//在第index后面插入一个节点


{
// int i;
int count;
count=NodeCount(l);
if(index<0||index>count)

{
printf("Wrong insert position!index should in 0-%d\n",count);
return;
}
ptonode pnode=NULL,pprev=*l,pprevnext=NULL;
// pnode=(ptonode)malloc(sizeof(Node));
pnode=createnode(data);

if(index==0)

{
pnode->next=*l;
*l=pnode;
return;
}

pprev=locatepos(l,index);
pnode->next=pprev->next;
pprev->next=pnode;

/**//*
for(i=1;i<index;i++)
pprev=pprev->next;
//pprev->next=ptonode;
pprevnext=pprev->next;
pprev->next=pnode;
pnode->next=pprevnext;*/
}

void deletenode(List* l,int index)//删除第index个节点


{
int count;
count=NodeCount(l);
if(*l==NULL||index<=0||index>count)

{
printf("Wrong insert position!index should in 0-%d\n",count);
return ;
}

ptonode pprev=*l,pnode=NULL,fnode;

if(index==1)

{
*l=pprev->next;
free(pprev);
return;
}
int i;
for(i=1;i<index-1;i++)
pprev=pprev->next;
fnode=pprev->next;
pnode=fnode->next;
free(fnode);
pprev->next=pnode;
return;
}



void editnode(List* l,int index,elementtype data)


{
ptonode pnode;
pnode=locatepos(l,index);
pnode->data=data;
}


void sortlist(List *l,ptonode L[])//从小到大排序。。数组方式实现排序。。。局限性很大


{
int count;
int i,j;
count=NodeCount(l);
ptonode head;
head=*l;

for(i=0;i<count;i++)

{
L[i]=head;
head=head->next;
}

ptonode temp; //交换排序。。
for(i=0;i<count-1;i++)

{
temp=L[i];
for(j=i+1;j<count;j++)

{
if(L[i]->data>L[j]->data)

{
temp=L[i];
L[i]=L[j];
L[j]=temp;
}
}
}

/**//* L=(ptonode)malloc(count*sizeof(ptonode));

for(i=0,pnode=L;i<count;i++,pnode++)//地址值++是加上指针所指向数据类型大小
{
pnode=head;
head=head->next;
}
ptonode temp; //交换排序。。
for(i=0;i<count-1;i++)
{
temp=&L[i];
for(j=i+1;j<count;j++)
{
if(L[i].data>L[j].data)
{
temp=&L[i];
&L[i]=&L[j];
&L[j]=temp;
}
}
}*/
// return L;
}


ptonode *sortlist0(List *l)//动态开辟内存实现数组排序。。。开心了。。。


{
int i,j,count;
ptonode *L,*pnode,head;
head=*l;
count=NodeCount(l);
L=(ptonode *)malloc(count*sizeof(ptonode));//这里是一个指针的指针。。。这。。

for(i=0,pnode=L;i<count;i++,pnode++)//地址值++是加上指针所指向数据类型大小

{
*pnode=head;
head=head->next;
}
ptonode temp; //交换排序。。
for(i=0;i<count-1;i++)

{
temp=L[i];
for(j=i+1;j<count;j++)

{
if(L[i]->data>L[j]->data)

{
temp=L[i];
L[i]=L[j];
L[j]=temp;
}
}
}
return L;
}
void emptylist(List *l)//清空


{
ptonode pnode=*l,fnode;
if(!pnode)
return;
else
while(pnode!=NULL)

{
fnode=pnode;
pnode=pnode->next;
free(fnode);
}
return ;
}

void printlist(List *l)//打印


{
ptonode pnode=*l;
while(pnode!=NULL)

{
printf("%d ",pnode->data);
pnode=pnode->next;
}
printf("\n");
}


Link.h头文件(这个文件主要用来定义数据结构,以及函数申明):
//#ifndef LIST_H
//#define LIST_H
typedef int elementtype;

struct Node


{
elementtype data;
struct Node *next;
};

typedef struct Node Node;
typedef Node* ptonode;
typedef Node* List;


void initlist(List* l);
void appendnode(List* l,elementtype data);
void insertnode(List* l,int index,elementtype data);
void deletenode(List* l,int index);
void editnode(List* l,int index,elementtype data);
ptonode findnode(List* l,elementtype data);
void sortlist(List* l,ptonode L[]);
ptonode *sortlist0(List* l);
void emptylist(List *l);
void printlist(List *l);
int NodeCount(List *l);
posted on 2010-10-31 20:05
jince 阅读(249)
评论(0) 编辑 收藏 引用