注册 登录
编程论坛 数据结构与算法

[原创]链表基本操作的程序实现.

nuciewth 发布于 2007-04-10 13:48, 15728 次点击

#include<stdio.h>
#include<malloc.h>

typedef struct List_Node{
int info;
struct List_Node *next;
}node;//结点结构体

/******************************/
/* 尾插法建立带头结点的单链表 */
/******************************/
node* Creat_Node()
{
node *head,*pre,*p;
int x;
head=(node*)malloc(sizeof(node));;
head->next=NULL;
pre=head;
printf("输入各结点的值,以0结束:");
while(EOF!=(scanf("%d",&x))&&x!=0)
{
p=(node*)malloc(sizeof(node));
p->info=x;
p->next=pre->next;
pre->next=p;
pre=pre->next;
}
return head;
}

/******************************/
/* 头插法建立带头结点的单链表 */
/******************************/
node* Build_Node()
{
node *head,*p;
int x;
head=(node*)malloc(sizeof(node));;
head->next=NULL;
printf("输入各结点的值,以0结束:");
while(EOF!=(scanf("%d",&x))&&x!=0)
{
p=(node*)malloc(sizeof(node));
p->info=x;
p->next=head->next;
head->next=p;
}
return head;
}


/******************************/
/* 打印单链表 */
/******************************/

void Print_Node(node *head)
{
node *p=head->next;
printf("输出该链表:");
while(p)
{
printf("%-5d--->",p->info);
p=p->next;
}
if(p==NULL)
{
printf("^\n\n\n");
}
}

52 回复
#2
nuciewth2007-04-10 13:49

#include"Head_Node.h"

int Count_Node(node *head)
{
node *p=head->next;
int num=0;
while(p!=NULL)
{
num++;
p=p->next;
}
return num;
}

int main()
{
node *head;
head=Creat_Node();
Print_Node(head);
printf("结点个数为:%d\n",Count_Node(head));
return 0;
}

#3
nuciewth2007-04-10 13:49

#include"head_node.h"

/**********************************/
/* 删除重复 */
/**********************************/

void Delete_Repeat_Node(node *head)
{
node *p,*pre,*s;
pre=head->next;
p=pre->next;
while(p)
{
s=p->next;
while(s&&s->info!=p->info)
{
s=s->next;
}
if(s)
{
pre->next=p->next;
free(p);
p=pre->next;
}
else
{
pre=p;
p=p->next;
}
}
}

int main()
{
node *head;
head=Creat_Node();
Print_Node(head);
Delete_Repeat_Node(head);
Print_Node(head);
return 0;
}


#4
nuciewth2007-04-10 13:49

#include"Head_Node.h"
/************************************/
/* 在Y前插入X */
/************************************/
void Before_y_Insert_x(node* head,int y,int x)
{
node *pre,*p,*s;
pre=head;
p=pre->next;
while(p&&p->info!=y)
{
pre=p;
p=p->next;
}
if(p==NULL)
{
printf("error!%d不在该链表中\n",y);
}
else
{
s=(node*)malloc(sizeof(node));
s->info=x;
s->next=p;
pre->next=s;
}
}

int main()
{
node *head;
int x,y;
head=Creat_Node();
printf("在y前插入x,输入y,x:");
scanf("%d%d",&y,&x);
Print_Node(head);
Before_y_Insert_x(head,y,x);
Print_Node(head);
return 0;
}

#5
nuciewth2007-04-10 13:50

#include"Head_Node.h"

/************************************/
/* 判断链表是否有序 */
/************************************/
int Is_Sort(node *head)
{
node *p,*pre;
int flag;
pre=head->next;
p=pre->next;
flag=pre->info>p->info?1:0;
while(p)
{
pre=p;
p=p->next;
if(p)
{
if(flag!=pre->info>p->info?1:0)
{
return 0;
}
}
}
return 1;
}

int main()
{
node *head;
int flag;
head=Creat_Node();
Print_Node(head);
flag=Is_Sort(head);
if(flag==1)
{
printf("该链表有序!\n");
}
else
{
printf("该链表无序!\n");
}
return 0;
}

#6
nuciewth2007-04-10 13:51
#include"Head_Node.h"
/************************************/
/* 链表反序 */
/************************************/
void convert_Node(node *head)
{
node *pre,*p=head->next;
head->next=NULL;
while(p)
{
pre=p;
p=p->next;
pre->next=NULL;
pre->next=head->next;
head->next=pre;
}
}



int main()
{
node *head;
head=Creat_Node();
Print_Node(head);
convert_Node(head);
Print_Node(head);
return 0;
}


#7
nuciewth2007-04-10 13:51

#include"Head_Node.h"

/************************************/
/* 将奇偶数按原相对顺序分开 */
/************************************/

node *Divide_Node(node *head1)
{
node *head2,*pre,*p,*s;
p=head1->next;
pre=head1;
head2=(node*)malloc(sizeof(node));
head2->next=NULL;
s=head2;
while(p)
{
if(p->info%2)
{
pre->next=p->next;
p->next=s->next;
s->next=p;
s=p;
p=pre->next;
}
else
{
pre=p;
p=p->next;
}
}
return head2;
}

int main()
{
node *head,*head2;
head=Creat_Node();
Print_Node(head);
head2=Divide_Node(head);
printf("打印偶数链表\n");
Print_Node(head);
printf("打印奇数链表\n");
Print_Node(head2);
return 0;
}

#8
nuciewth2007-04-10 13:52

#include"Head_Node.h"

/*******************************/
/*删除所有大于x而不大于Y的结点 */
/*******************************/

void Delete_X_y(node *head,int x,int y)
{
node *pre=head,*p=head->next;
if(x>=y)
{
printf("不符合条件!\n");
return ;
}
while(p)
{
if(p->info>x&&p->info<=y)
{
pre->next=p->next;
free(p);
p=pre->next;
}
else
{
pre=p;
p=p->next;
}
}
}

int main()
{
node *head;
int x,y;
head=Creat_Node();
printf("输出x,y的值:");
scanf("%d%d",&x,&y);
Print_Node(head);
Delete_X_y(head,x,y);
Print_Node(head);
return 0;
}

#9
nuciewth2007-04-10 13:52

#include"Head_Node.h"
/****************************************************/
/* 直接插入排序 */
/****************************************************/

void Insert_Sort(node *head)
{
node *p,*pre,*s,*r;
p=head->next;
head->next=NULL;
while(p)
{
pre=p->next;
r=head;
s=head->next;
while(s&&s->info<p->info)
{
r=s;
s=s->next;
}
p->next=r->next;
r->next=p;
p=pre;
}
}


int main()
{
node *head;
head=Creat_Node();
Print_Node(head);
Insert_Sort(head);
Print_Node(head);
return 0;
}

#10
nuciewth2007-04-10 13:52

#include"head_node.h"
node* merge_two_List(node *head1,node *head2)
{
node *head,*s,*p,*r;
p=head1->next;
s=head2->next;
head=(node*)malloc(sizeof(node));
head->next=NULL;
r=head->next;
while(s&&p)
{
if(p->info<s->info)
{
head1->next=p->next;
p->next=NULL;
r->next=p;
r=r->next;
p=head1->next;
}
else
{
head2->next=s->next;
s->next=NULL;
r->next=s;
r=r->next;
s=head2->next;
}
}
while(s)
{
head2->next=s->next;
s->next=NULL;
r->next=s;
r=r->next;
s=head2->next;
}
while(p)
{
head1->next=p->next;
p->next=NULL;
r->next=p;
r=r->next;
p=head1->next;
}
//free(head1);
//free(head2);
return head;
}

int main()
{
node *head,*head1,*head2;
head1=Creat_Node();
head2=Creat_Node();
head=merge_two_List(head1,head2);
Print_Node(head);
return 0;
}

#11
I喜欢c2007-04-10 23:29
多谢楼主...
#12
linux_ha2007-04-28 17:43
楼主给个释放头为head的链表的函数吧!
#13
zkkpkk2007-04-28 19:27

我滴


/*****链式表的实现和操作*****/
//作者:zkkpkk
#include <iostream.h>


class Linklist//定义链表类
{
public:
    Linklist* next;
    Linklist()
    {
        next=NULL;
    }
    int data;
    void Push(Linklist** refhead,int data);//添加节点
    void Insert(Linklist* head,Linklist* pio);//插入节点
    void Display(Linklist* head);//显示链表
    int Length(Linklist* head);//统计节点数目
    Linklist* Find(Linklist* head,int data);//查找节点地址
    void Delete(Linklist* head,int data);//删除节点
};
Linklist* head=new Linklist;
void Linklist::Insert(Linklist* head,Linklist* pio)
{
    Linklist *cur,*bef;
    cur=bef=head;
    while(cur != NULL)
    {    if(cur->data >= pio->data)
            break;
        else
        {bef=cur;
        cur=cur->next;
        }
    }
    if(cur==head)
    {    pio->next=head;
        head=pio;
    }
    else
    {
        bef->next=pio;
        pio->next=cur;
    }
}
Linklist* Linklist::Find(Linklist* head,int data)
{
    bool bo=true;
    Linklist* cur;
    cur=head;
    while(cur != NULL)
    {
        if(cur->data==data){
        bo=false;
        return cur;}
    cur=cur->next;
    }
    if(bo==true){
        cout<<\"It is no have the Linklist!\"<<endl;
        return NULL;
    }
}
int Linklist::Length(Linklist* head)
{
    int count=0;
    Linklist* cur;
    cur=head;
    while(cur != NULL)
    {
        cur=cur->next;
        count++;
    }
    return count;
}
void Linklist::Push(Linklist** refhead,int data)
{
    Linklist* newLinklist=new Linklist;
    newLinklist->data=data;
    newLinklist->next=*refhead;
    *refhead=newLinklist;
}
void Linklist::Display(Linklist* head)
{
    Linklist *temp=new Linklist;
    temp=head;
    if(temp==NULL)
        cout<<\"The Linklist is empty!\"<<endl;
    else
    {
        while(temp!=NULL)
        {
            cout<<temp->data<<\"\t\";
            temp=temp->next;
        }
        cout<<endl;
    }
}
void Linklist::Delete(Linklist* head,int data)
{
    Linklist *cur,*bef;
    cur=bef=head;
    while(cur != NULL)
    {
        if(cur->data==data)
            break;
        else
        {
            bef=cur;
            cur=cur->next;
        }
    }
    if(cur==head)
    {
        cur->next=head;
        delete cur;
    }
    else
    {
        bef->next=cur->next;
        delete cur;
    }
}

#14
nuciewth2007-04-29 13:19

/************************************/
/* 释放链表 */
/************************************/
void Free_Node(node *head)
{
node *p=head->next;
while(p)
{
head->next=p->next;
free(p);
p=head->next;
}
free(head);
}

#15
zkkpkk2007-04-29 13:27


void Linklist::Delete_Link(Linklist* head)
{
    Linklist* temp = head->next;
    while(!(temp == NULL))
    {
        head->next=temp->next;
        delete temp;
        temp=head->next;
    }
    delete head;
}

#16
linux_ha2007-04-30 14:13
以下是引用nuciewth在2007-4-10 13:52:59的发言:

#include"head_node.h"
node* merge_two_List(node *head1,node *head2)
{
node *head,*s,*p,*r;
p=head1->next;
s=head2->next;
head=(node*)malloc(sizeof(node));
head->next=NULL;
r=head->next;
while(s&&p)
{
if(p->info<s->info)
{
head1->next=p->next;
p->next=NULL;
r->next=p;
r=r->next;
p=head1->next;
}
else
{
head2->next=s->next;
s->next=NULL;
r->next=s;
r=r->next;
s=head2->next;
}
}
while(s)
{
head2->next=s->next;
s->next=NULL;
r->next=s;
r=r->next;
s=head2->next;
}
while(p)
{
head1->next=p->next;
p->next=NULL;
r->next=p;
r=r->next;
p=head1->next;
}
//free(head1);
//free(head2);
return head;
}

int main()
{
node *head,*head1,*head2;
head1=Creat_Node();
head2=Creat_Node();
head=merge_two_List(head1,head2);
Print_Node(head);
return 0;
}



上面的合并函数有个问题:结构指针r的开始被赋值为"null", 然后在 while 循环里又令 r->next = p, 这是不是有问题?

#17
nuciewth2007-04-30 20:26
结构指针r的开始被赋值为"null", 然后在 while 循环里又令 r->next = p,
是哪,能不能标记一下.
#18
少博2007-05-01 21:04
我还看不懂呀.看来我要多下点功夫才行.
#19
hyfz_8252007-05-02 23:25

看到版主写下这么多的代码,真是好兴奋呀!虽然学习数据结构已经有几个月了,但是还是没有弄明白那些算法,和一个程序之间有什么联系!算法是在程序中调用的还是怎么样,一直没有弄明白,请教好多同学,他们也是说不清楚的,希望你能指点一下,谢谢了!

#20
zkkpkk2007-05-03 22:01
以下是引用nuciewth在2007-4-30 20:26:52的发言:
结构指针r的开始被赋值为"null", 然后在 while 循环里又令 r->next = p,
是哪,能不能标记一下.

这两句没有问题呀

#21
nuciewth2007-05-05 21:10
回复:(hyfz_825) 看到版主写下这么多的代码,真...
算法是在程序中调用的还是怎么样

算法是一个程序的灵魂,就是说是它的思想和指导这个程序应该怎么来实现.
#22
zkkpkk2007-05-06 10:28
以下是引用hyfz_825在2007-5-2 23:25:06的发言:

看到版主写下这么多的代码,真是好兴奋呀!虽然学习数据结构已经有几个月了,但是还是没有弄明白那些算法,和一个程序之间有什么联系!算法是在程序中调用的还是怎么样,一直没有弄明白,请教好多同学,他们也是说不清楚的,希望你能指点一下,谢谢了!

提供一种思想,当你做软件的时候指不定遇到什么问题,打好算法基础就能不被问题难住

#23
linux_ha2007-05-08 11:14
node* merge_two_List(node *head1,node *head2)
{
node *head,*s,*p,*r;
p=head1->next;
s=head2->next;
head=(node*)malloc(sizeof(node));
head->next=NULL;
r=head->next; // r为一空指针, 我的意思是它指向的空间能被赋值吗?
while(s&&p)
{
if(p->info<s->info)
{
head1->next=p->next;
p->next=NULL;
r->next=p; // 这里进行了赋值
r=r->next;
p=head1->next;
}
...
#24
nuciewth2007-05-08 22:50

LS的看的蛮仔细.
我刚写了个小程序测试了一下.
#include "stdio.h"
#include "conio.h"
#include"malloc.h"

typedef struct node{
int data;
struct node *next;
}node ;
main()
{
node *head=(node *)malloc(sizeof(node));
head->next=NULL;
head->next->data=3;
printf("Hello, world%d\n",head->next->data);
getch();
}

#include "stdio.h"
#include "conio.h"
#include"malloc.h"

typedef struct node{
int data;
struct node *next;
}node ;
main()
{
node *r,*head=(node *)malloc(sizeof(node));
head->next=NULL;
r=head->next;
head->next->data=3;
printf("Hello, world%d %d\n",head->next->data,r->data);
getch();
}
总结:我认为.既然已经给r一个指针,它的初始化为空,但不能就判断它就是空指针了.两者是有区别的.不知道我这样解释对不对.

谢谢关注.请大家以后多提意见.

#25
chenxinfu2007-05-10 15:35
回复:(nuciewth)[原创]链表基本操作的程序实现.

#include"head_node.h"

/**********************************/
/* 删除重复 */
/**********************************/

void Delete_Repeat_Node(node *head)
{
node *p,*pre,*s;
pre=head->next;
p=pre->next;
while(p)
{
s=p->next;
while(s&&s->info!=p->info)
{
s=s->next;
}
if(s)
{
pre->next=p->next;
free(p);
p=pre->next;
}
else
{
pre=p;
p=p->next;
}
}
}

这部分楼主忽略了第一个元素和后面相同的情况,修改一下吧。
#26
nuciewth2007-05-11 11:14
呵呵,我写的是带头结点的,就是说第一个结点只起引导作用没有实质意义.所以不用比较的.
谢谢建议.
#27
chenxinfu2007-05-11 22:46
以下是引用nuciewth在2007-5-11 11:14:02的发言:
呵呵,我写的是带头结点的,就是说第一个结点只起引导作用没有实质意义.所以不用比较的.
谢谢建议
头结点空间的浪费是为了以后算法的方便,可浪费第一个结点我到现在好像还没见到啊。刚开始学这个,确实有点晕
#28
nuciewth2007-05-12 20:07
浪费第一个结点可以简化很多操作的,比如对头结点的判空操作,再比如修改头结点等操作.
其中如果要修改头结点的话,如果不用带头结点的,那就要使用二级指针.
#29
chenxinfu2007-05-12 23:29

谢谢版主啊。你这解释我就懂了啊。

#30
xxyshow1152007-06-06 15:54

查找的那部分呢?

#31
ㄣ黑銫禮ゞ菔2007-06-06 16:37

好乱,给个完整版

#32
mdqyy1162007-06-06 18:04
回复:(nuciewth)#include
写的不错,,,就是第一个接点没有包括进去,,如果要删除的是第一个接点怎么办!!!
#33
nuciewth2007-06-06 22:21

第一个是头结点,只指示链表的,如果连这个都删了,那这个链表也就不存在了.

#34
ㄣ黑銫禮ゞ菔2007-06-07 11:16

能不能帮我修改一下!


#include "stdio.h"
#include "iostream.h"
#include "malloc.h"

struct LINKLIST
{
int data;
struct LINKLIST *head,*last;
}

/******************************/
/* 按序号查找 */
/******************************/

LINKLIST *get(int i,LINKLIST *head)
{
int j;
p=head;
while((j<i)&&(p->next!=NULL))
{
p=p-next;
j++;
}
if(j==i)
return p;
else
return NULL;
}
/******************************/
/* 按值查找 */
/******************************/
LINKLIST *locate(DATATYPE2 X,LINKLIST *head)
{
LINKLIST *p;
p=head->next;
while(p!=NULL)
if(p->data==x)
return p;
else
p=p->next;
return NULL;
}
/******************************/
/* 在以知结点的后面插入新结点 */
/******************************/
void insertafter(DATATYPE2 x,LINKLIST *p)
{
LINKLIST *t;
t=malloc(sizeof(LINKLIST))
t->data=p->next;
p->next=t;
}
/******************************/
/* 在以知结点的前面插入新结点 */
/******************************/
int insertbefor(DATATYPE2 x,int i,LINKLIST *head)
{
LINKLIST *p;
int r=1;
p=get(i-1,head);
if(p!=NULL)
insertbefor(x,p)
else
r=0;
return r;
}
/******************************/
/* 删除第i个结点 */
/******************************/
int deleteordor(int i,LINKLIST *head)
{
LINKLIST *p;
int r=1;
p=get(i-1,head);
if((p!=NULL)&&(p->next!=NULL))
deletefter(p);
else
r=0;
return r;
}
void main()
{
LINKLIST *head,*last,*t;
char ch;
t=(struct LINKLIST*)malloc(sizeof(struct LINKLIST)) //建立表头结点
head=t;
last=t;
t->next=NULL;
while(ch=getchar()!='$')
{
t=(struct LINKLIST*)malloc(sizeof(struct LINKLIST));
t->data=ch;
last->next=t;
last=t;
t->next=head;
}
}

#35
ㄣ黑銫禮ゞ菔2007-06-07 19:50

要求:建立一个带有头结点的单向循环链表

用户输入命令有:

1:输出单向循环链表的所有结点的值
2:查找第i个结点或值为某一个值的结点
3:在指定的地方插入一个结点
4:删除指定的结点

我有个还没完成的程序 请指教 能帮忙完成主函数的调用最好 希望有个菜单!


#include "stdio.h"
#include "iostream.h"
#include "malloc.h"

struct LINKLIST
{
int data;
struct LINKLIST *head,*last,*next;
};

/******************************/
/* 按序号查找 */
/******************************/

struct LINKLIST *get(int i,struct LINKLIST *head)
{
int j;
p=head;
while((j<i)&&(p->next!=NULL))
{
p=p-next;
j++;
}
if(j==i)
return p;
else
return NULL;
}
/******************************/
/* 按值查找 */
/******************************/
struct LINKLIST *locate(int x,struct LINKLIST *head)
{
struct LINKLIST *p;
p=head->next;
while(p!=NULL)
if(p->data==x)
return p;
else
p=p->next;
return NULL;
}
/******************************/
/* 在以知结点的后面插入新结点 */
/******************************/
void insertafter(DATATYPE2 x,LINKLIST *p)
{
struct LINKLIST *t;
t=(struct LINKLIST*)malloc(sizeof(struct LINKLIST))
t=p->next;
p->next=t;
}
/******************************/
/* 在以知结点的前面插入新结点 */
/******************************/
int insertbefor(int x,int i,struct LINKLIST *head)
{
struct LINKLIST *p;
int r=1;
p=get(i-1,head);
if(p!=NULL)
insertbefor(x,i,p)
else
r=0;
return r;
}
/******************************/
/* 删除第i个结点 */
/******************************/
int deleteordor(int i,struct LINKLIST *head)
{
struct LINKLIST *p;
int r=1;
p=get(i-1,head);
if((p!=NULL)&&(p->next!=NULL))
deleteordor(i,p);
else
r=0;
return r;
}
void main()
{
struct LINKLIST *head,*last,*t;
char ch;
int i.k;
t=(struct LINKLIST*)malloc(sizeof(struct LINKLIST)) //建立表头结点
head=t;
last=t;
t->next=NULL;
count<<"请输入结点,以0结束"
while(ch=getchar()!='0')
{
t=(struct LINKLIST*)malloc(sizeof(struct LINKLIST));
t->data=ch;
last->next=t;
last=t;
t->next=head;
}

}

#36
hejinjiang2007-06-08 10:10

#37
ㄣ黑銫禮ゞ菔2007-06-10 14:11
....表只顶!给个建议、哪错了、你的程序什么的……
#38
HJin2007-06-11 16:06
To nuciewth:



I skimmed through your code and would like to make a few comments:

0. You have a faily good understanding of pointers in C/C++. In my opinion, all linked list is basically pointer-based.

1. You learn C because you want to advance to C++ eventually. Thus it might be a good habit to name your functions after some standard, say STL.

尾插法建立带头结点的单链表 --- the function is called push_back in STL list template;
头插法建立带头结点的单链表 --- the function is called push_front in STL list template.

2. If your post is to educate people, you may want to add some comments for the idea and the meaning of your variables. For example, your

pre

in

尾插法建立带头结点的单链表

actually points to the last node in the linked list, so it is good to rename it as "tail", "back", or "rear".

3. Time complexity and space complexity are missing. No one talks about an algorithm without telling these complexities.


#39
nuciewth2007-06-11 22:24

谢谢HJin的建议.

尽管是英文,我还是认真的把他们好好的看完,很庆幸你的英语可以使我明白.
我给出这些代码是因为有很多朋友问到,所以直接把这些写出来,当然没有用注释是我的错.因为我是根据我的思路就这么一路写下来,也就忘了要加注释,,下次有机会,我会做好的.
还有写变量的一些习惯,的确,我这方面也欠佳.希望以后能够改进吧.
希望以后C++进阶,把它做成模板.

再次谢谢你.

#40
herbert_19872007-06-14 00:29
哗!链表操作大全!
#41
ㄣ黑銫禮ゞ菔2007-06-14 16:07

是的
我们那个程序做出来了呢


要求:建立一个带有头结点的单向循环链表

用户输入命令有:

1:输出单向循环链表的所有结点的值
2:查找第i个结点或值为某一个值的结点
3:在指定的地方插入一个结点
4:删除指定的结点

我有个还没完成的程序 请指教 能帮忙完成主函数的调用最好 希望有个菜单!


HOHO~~不过不和这一样,已经交到老师那了,还是得谢谢楼主了

#42
cinsin2007-06-25 07:22

我画了画删除重复函数void Delete_Repeat_Node(node *head),算法是第3个几结点和第2个结点开始比较开始的,但是直到最后都没和第1结点个比较。我觉得应该在后面加上和第1个结点的比较。
/**********************************/
/* 删除重复 */
/**********************************/

void Delete_Repeat_Node(node *head)
{
node *p,*pre,*s;
pre=head->next;
p=pre->next;
while(p)
{
s=p->next;
while(s&&s->info!=p->info)
{
s=s->next;
}
if(s)
{
pre->next=p->next;
free(p);
p=pre->next;
}
else
{
pre=p;
p=p->next;
}
}
if(s->next==pre->next)/*用s和pre比较*/
{
p->next=s->next;
free(s);
}
}
不知道是否正确,若有错误,请大家指正

#43
nuciewth2007-06-25 22:21

谢谢LS的建议.
但我做的是带头结点的单链表,所以头结点是不参加删除的(没有实质是的内容意义,仅作为链表的指针指向)

#44
cinsin2007-06-27 07:52

呵呵,明白了。谢谢斑竹的指点~~

#45
ChamPagneZ2007-08-07 06:28
楼主基础满扎实,学习了
#46
wingyip2007-08-07 08:12
我正想学学链表,之前看过书但是忘记了,谢谢你们啰。
#47
hwxsdy2007-08-08 11:20

学习学习

#48
wingyip2007-08-09 08:08
请问楼主你的判断链表是否有序 是不是只判断降序的?
#49
SUN212007-09-25 21:27
刚学数据结构,受益匪浅!
#50
SUN212007-09-26 21:39
回复:(nuciewth)[原创]链表基本操作的程序实现.
while(EOF!=(scanf("%d",&x))&&x!=0) //引用楼主语句

请问 EOF!=(scanf("%d",&x)) 这句是什么意思
#51
nuciewth2007-09-28 14:25
以下是引用SUN21在2007-9-26 21:39:39的发言:
while(EOF!=(scanf("%d",&x))&&x!=0) //引用楼主语句

请问 EOF!=(scanf("%d",&x)) 这句是什么意思

scanf()函数是用返回值的,当它返回-1时表示输入错误而EOF就是-1.

12