求单链表的赋值!

爱在今世 2013-05-21 03:26:34
RT,有单链表
typedef struct Node
{
int data;
struct Node *next;

}Node,*LinKlist;

假如我要这个单链表有10个节点,该怎么赋值呢?
...全文
783 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-05-22
  • 打赏
  • 举报
回复
//假设带表头结点的单向链表头指针为head,试编写一个算法将值为5的结点插入到连接表的第k个结点前,并对该链表进行排序。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
struct NODE {
    int          data;
    struct NODE *next;
} H,*head,*p,*q;
int i,j,k,n,t;
int main() {
    srand(time(NULL));

    //填写头节点数据
    H.data=-1;
    H.next=NULL;
    head=&H;

    //创建10个节点的单链表
    p=head;
    for (i=0;i<10;i++) {
        q=(struct NODE *)malloc(sizeof(struct NODE));
        if (NULL==q) return 1;
        q->data=10+rand()%90;//填写10..99的随机值
        q->next=NULL;
        p->next=q;
        p=q;
    }

    //输出整个单链表
    p=head->next;
    while (1) {
        if (NULL==p) {
            printf("\n");
            break;
        }
        printf("%02d->",p->data);
        p=p->next;
    }

    //将值为5的结点插入到单链表的第k个结点前
    k=3;
    n=0;
    p=head;
    while (1) {
        if (NULL==p) {
            break;
        }
        n++;
        if (k==n) {
            q=(struct NODE *)malloc(sizeof(struct NODE));
            if (NULL==q) return 1;
            q->data=5;
            q->next=p->next;
            p->next=q;
            break;
        }
        p=p->next;
    }

    //输出整个单链表
    p=head->next;
    while (1) {
        if (NULL==p) {
            printf("\n");
            break;
        }
        printf("%02d->",p->data);
        p=p->next;
    }

    //从小到大排序
    for (p=head->next;p!=NULL && p->next!=NULL;p=p->next) {
        for (q=p->next;q!=NULL;q=q->next) {
            if (p->data > q->data) {
                t=p->data;p->data=q->data;q->data=t;
            }
        }
    }

    //输出整个单链表
    p=head->next;
    while (1) {
        if (NULL==p) {
            printf("\n");
            break;
        }
        printf("%02d->",p->data);
        p=p->next;
    }

    //释放所有节点
    p=head->next;
    while (1) {
        if (NULL==p) {
            break;
        }
        q=p->next;
        free(p);
        p=q;
    }

    return 0;
}
//20->75->80->82->78->33->54->63->10->99->
//20->75->05->80->82->78->33->54->63->10->99->
//05->10->20->33->54->63->75->78->80->82->99->
hugett 2013-05-22
  • 打赏
  • 举报
回复
引用 3 楼 showyusy 的回复:
多谢了,另外可以帮我看看吗?函数声明的时候错误,说是名称列表中的原型参数非法 代码如下
#include <stdio.h>
#include <string.h>
#include <malloc.h>

int LengthList(LinKlist);
//int deletelist(LinKlist, int, int);
typedef struct Node
{
	int data;
	struct Node *next;

}Node,*LinKlist;
int main()
{ 
	int n=0;
	LinKlist l=(LinKlist)malloc(sizeof(Node));
	LinKlist start=l;
	while (n>=0)
	{
		if(n==10)
		{
			l->next=NULL;
			break;
		}
		l->data=n+1;
		l->next=(LinKlist)malloc(sizeof(Node));
		l=l->next;
		n++;		
	}
	l=start;
	if(deletelist(start,3,7)==0)
	{
		while (n>=0)
		{
			printf("%d ",l->data);
			l=l->next;
			if(l->next==NULL)
			{
				break;
			}
		}
	}
	

}
int deletelist(LinKlist l,int min,int max)
{
	Node *q=l,*p=l->next;
	int del=0;
	while (p)
	{
		if(p->data<min)
		{
			q=p;
			p=p->next;
		}
		else if(p->data<=max)
		{
			q->next=p->next;
			free(p);
			p=q->next;
			del=1;
		}
		else
		{
			break;
		}
	}
	if(del==0)
		return -1;
	return 0;
}
int LengthList(LinKlist pHead)
{
    int length = 0;
	LinKlist n = pHead->next;
    while(NULL != n)
    {
        ++length;
		n = n->next;
    }
    return length;
}
就是我注释的那里

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

//int LengthList(LinKlist);
//int deletelist(LinKlist, int, int);
typedef struct Node
{
	int data;
	struct Node *next;

}Node,*LinKlist;
int LengthList(LinKlist);//LinKlist都还没定义呢。。放到struct定义后边。。
int deletelist(LinKlist, int, int);
int main()
{ 
	int n=0;
	LinKlist l=(LinKlist)malloc(sizeof(Node));
	LinKlist start=l;
	while (n>=0)
	{
		if(n==10)
		{
			l->next=NULL;
			break;
		}
		l->data=n+1;
		l->next=(LinKlist)malloc(sizeof(Node));
		l=l->next;
		n++;		
	}
	l=start;
	if(deletelist(start,3,7)==0)
	{
		while (n>=0)
		{
			printf("%d ",l->data);
			l=l->next;
			if(l->next==NULL)
			{
				break;
			}
		}
	}
	

}
int deletelist(LinKlist l,int min,int max)
{
	Node *q=l,*p=l->next;
	int del=0;
	while (p)
	{
		if(p->data<min)
		{
			q=p;
			p=p->next;
		}
		else if(p->data<=max)
		{
			q->next=p->next;
			free(p);
			p=q->next;
			del=1;
		}
		else
		{
			break;
		}
	}
	if(del==0)
		return -1;
	return 0;
}
int LengthList(LinKlist pHead)
{
    int length = 0;
	LinKlist n = pHead->next;
    while(NULL != n)
    {
        ++length;
		n = n->next;
    }
    return length;
}
爱在今世 2013-05-21
  • 打赏
  • 举报
回复
多谢了,另外可以帮我看看吗?函数声明的时候错误,说是名称列表中的原型参数非法 代码如下
#include <stdio.h>
#include <string.h>
#include <malloc.h>

int LengthList(LinKlist);
//int deletelist(LinKlist, int, int);
typedef struct Node
{
	int data;
	struct Node *next;

}Node,*LinKlist;
int main()
{ 
	int n=0;
	LinKlist l=(LinKlist)malloc(sizeof(Node));
	LinKlist start=l;
	while (n>=0)
	{
		if(n==10)
		{
			l->next=NULL;
			break;
		}
		l->data=n+1;
		l->next=(LinKlist)malloc(sizeof(Node));
		l=l->next;
		n++;		
	}
	l=start;
	if(deletelist(start,3,7)==0)
	{
		while (n>=0)
		{
			printf("%d ",l->data);
			l=l->next;
			if(l->next==NULL)
			{
				break;
			}
		}
	}
	

}
int deletelist(LinKlist l,int min,int max)
{
	Node *q=l,*p=l->next;
	int del=0;
	while (p)
	{
		if(p->data<min)
		{
			q=p;
			p=p->next;
		}
		else if(p->data<=max)
		{
			q->next=p->next;
			free(p);
			p=q->next;
			del=1;
		}
		else
		{
			break;
		}
	}
	if(del==0)
		return -1;
	return 0;
}
int LengthList(LinKlist pHead)
{
    int length = 0;
	LinKlist n = pHead->next;
    while(NULL != n)
    {
        ++length;
		n = n->next;
    }
    return length;
}
就是我注释的那里
  • 打赏
  • 举报
回复
一般使用链表的话都需要自己写一些链表基本操作的函数,创建、销毁。插入元素、删除元素等,楼上的只有销毁和插入,可以看严蔚敏的《数据结构》,很详细
Carl_CCC 2013-05-21
  • 打赏
  • 举报
回复
#include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct Node *next; }Node,*LinKlist; LinKlist insert( LinKlist plist, int data ) { LinKlist q = plist; LinKlist p = (LinKlist)malloc(sizeof(Node)); p->next = NULL; p->data = data; if( NULL == plist ) { plist = p; } else { while(q->next) q = q->next; q->next = p; } return plist; } void printlist( LinKlist plist ) { while(plist) { printf("Node: %d\n", plist->data); plist = plist->next; } } void destorylist( LinKlist plist ) { LinKlist p; if(plist == NULL) return; while(plist) { p = plist; plist=plist->next; free(p); } } int main() { LinKlist list = NULL; int i; for(i=0;i<10;i++) list=insert(list,i); printlist(list); //free the memory, or will leak destorylist(list); return 0; }

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧