c语言实现单链表单链表

c语言链表编程题_百度知道
c语言链表编程题
则输出“There is no item in XX list已知有两个递增的正整数序列A和B。要求.”,占一行,序列中元素个数未知、C1,分别为A、C2中的所有节点、C2:依次输入两个递增的正整数序列A和B,设为C2,同一序列中不会有重复元素出现。输出链表C1中的元素,占一行,将集合A+B中的元素存储在链表C2中、B,注意-1不算这个正整数序列中的元素(不要统计-1)、B,有可能某个序列为空。输入与输出要求、B这两个链表存储两个正整数序列,然后将集合A-B中的元素存储在链表C1中,序列元素的个数未知:建立四个单链表。每行的每个元素后有一个空格,每个正整数序列占一行。你的任务是求这两个序列的差集A-B与交集A+B;然后是链表C2中的元素,设为C1。正整数序列的输入是按照递增顺序输入的。A-B就是仅由在A中出现而不在B中出现的元素所构成的集合,但以输入“-1”结束;A+B就是既在A中出现也在B中出现的元素所构成的集合,并使用A,用-1作为结束标志、C1,注意最后一个元素后只有换行符,如果某个链表为空则。在程序结束前要释放链表A
提问者采纳
while(p) {
data = p-&gt, &quot, &data);C1&
if(p-&gt, p-&
free(p);next = newNdata =
c1last = newN
c2last = newNode, &data);#include &lt!q)\
Print(B#include &
while(data , *newN
while(p) {
data = p-&
*list = p-&next:&
else c1last-&
c1last = newNB&);
newNode-&:&next = newN
scanf(&quot, &quot!= -1) {
if((data &%d&
if(c1last)
c1last-&data =
if(p == NULL) {
printf(&quot, C1;
printf(&%d&quot, &), q = B;
p = p-&data);
while(q && q-&
Print(A; &
while(q && q-&), *c1
struct Node *
if(alast) alast-&
printf(&);There is no item in %s list&
p = p-&next = newN
newNode = (Node*) malloc (sizeof(Node));%d&
else c1last-&data =
printf(&%d&void Print(LinkedLA&data = data, &data);
p = A;data &
printf(&quot:&\), *c2last, C2;
A = B = C1 = C2 = alast = blast = c1last = c2last = NULL;
Print(C1;next = NULL.h&
else blast-& 0) && (;;
if(c2last)
c2last-&gt, *p;data)) {
newNode = (Node*) malloc (sizeof(Node)).h&
}}void main( ){
LinkedList A;);next = NULL:&next) printf(&;&#92!C2)
C2 = newN, s);
Print(C2;%d&nA;data!alast || data &\
if(blast) blast-&
newNode-&gt!blast || data &
return, &data);
if(;nC1; data) q = q-&data)) {
newNode = (Node*) malloc (sizeof(Node)), q = B;nC2;
while(p) {
blast = newN
alast = newN
if(;data &lt, *q!C1)
C1 = newNnB;next = NULL;
p = p-&next = newNode!C1)
C1 = newN\
while(p) {
data = p-&
if(, char *s) {
while(*list , B!B)
B = newNdata == data) {
newNode = (Node*) malloc (sizeof(Node));
else alast-&);next = newNtypedef struct Node{
if(; data) {
newNode = (Node*) malloc (sizeof(Node));data =
}}void Clear(LinkedList *list){
scanf(&data &
scanf(& 0) && (!= -1) {
if((data &
while( blast-&n&quot!= NULL) {
else c2last-&gt!q) break!A)
A = newN);
Node *alast, &
if(q-&);next = NULL;C2&}*LinkedList, * alast-&
newNode-& data) q = q-&
提问者评价
其他类似问题
为您推荐:
链表的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁6293人阅读
实现单链表的逆置。
多的就不说了。代码如下:
#include &stdio.h&
#include &stdlib.h&
typedef struct node {
struct node *
//创建链表
Node *CreatList(void)
int val, i,
Node *phead, *p, *q;
phead = NULL;
printf(&请输入您要建立的链表长度:\n&);
scanf(&%d&, &n);
printf(&请输入您要输入的数据:\n&);
for(i=0; i&n; ++i)
scanf(&%d&, &val);
p = (Node *)malloc(sizeof(Node));
if(NULL == phead)
q = phead =
p-&next = NULL;
//链表的逆置
Node *ReverseList(Node *phead)
Node *p, *q, *r;
//输出链表
void ShowList(Node *phead)
printf(&%d &, p-&data);
printf(&\n&);
int main(void)
phead = CreatList();
printf(&链表逆置前的数据:\n&);
ShowList(phead);
phead = ReverseList(phead);
printf(&链表逆置后的数据:\n&);
ShowList(phead);
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:179322次
积分:2167
积分:2167
排名:第8981名
原创:54篇
转载:17篇
评论:60条
(1)(1)(1)(3)(1)(1)(5)(6)(9)(13)(16)(6)(5)(3)C语言单链表常见操作系列
//定义单链表结构体
typedef int ElemT
typedef struct Node
struct Node *
}LNode,*LinkL
//创建单链表
void Build(LinkList L)
LinkList p,q;
printf("请输入n和n个元素:\n");
scanf("%d",&n);
while(n--)
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&q->data);
q->next = NULL;
p->next=q;
//求单链表的长度
void LinkLength(LinkList L)
int num = 0;
printf("%3d",p->data);
printf("长度为:%d",num);
//查找前驱结点
void Find(LinkList L,int x)
LinkList p,q;
while(p->next &&p->next->data!=x)
if(p->next)
printf("%d的前驱结点为%d",x,p->data);
printf("没有找到");
//删除结点值为x的元素
void Delete(LinkList L,int x)
LinkList p,q;
while(p->next && p->next->data!=x)
if(p->next)
p->next=q->
printf("删除成功!!");
//将表中的元素逆置
void Reverse(LinkList L)
LinkList p,q;
L->next=NULL;
p->next=L->
L->next=p;
printf("逆置成功!!");
//对单链表排序
void sort(LinkList L)
LinkList p,q;
for(p=L;p->next!=NULL;p=p->next)
for(q=p->q!=NULL;q=q->next)
if(p->data>q->data)
p->data=q->
printf("排序成功!");
//删除相同元素
void Deletesameelem(LinkList L)
LinkList p,q,s;
while(q->next)
if(q->data ==q->next->data)
p->next=q->
printf("删除成功!!");
//在升序链表中,插入新的元素,扔有序
void Insert(LinkList L,LinkList p)
while(s->next && s->next->datadata)
p->next=s->
s->next=p;
//提示界面显示
void Tips()
printf("\n");
printf("根据按键选择相应的操作:\n");
printf("输出单链表及其长度:\n");
printf("查找值为x的直接前驱结点:\n");
printf("删除值为x的结点:\n");
printf("将表中的元素逆置:\n");
printf("将单链表由小到大进行排序:\n");
printf("删除表中相同的元素:\n");
printf("在升序链表中插入元素x:\n");
printf("退出:\n");
void main()
LinkList L,p;
L = (LinkList)malloc(sizeof(LNode));
L->next=NULL;
L->data=-1;
scanf("%d",&op);
switch(op)
case 1:LinkLength(L);
printf("请输入要查找的元素x:\n");
scanf("%d",&x);
Find(L,x);
printf("请输入要删除的元素x:\n");
scanf("%d",&x);
Delete(L,x);
case 4:Reverse(L);
case 5:sort(L);
case 6:Deletesameelem(L);
printf("请输入要插入的元素X:\n");
scanf("%d",&x);
p=(LinkList)malloc(sizeof(LNode));
p->data=x;
Insert(L,p);
printf("插入成功!!!\n\n");
scanf("%d",&op);
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。C语言——单向链表的实现
[问题点数:40分,结帖人fy_lei]
C语言——单向链表的实现
[问题点数:40分,结帖人fy_lei]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年6月 C/C++大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。C语言链表&实现学生信息管理--初学者
#include&stdio.h&
#include&stdlib.h&
#include&string.h&
typedef struct student
&&char name[10];
&&struct student *
void creat(st1 *head);//创建链表
void print(st1* head);//打印链表
st1* find(st1 *head,int index);//链表查找
st1* insert(st1 *head);//插入信息
void dele(st1 *head);//删除信息
void change(st1 *head);//修改信息
void reverse(st1 *head);//反序输入信息
void sort(st1* head);//链表排序(用值交换的方式)
int main ()
&//用于选择选择&
&st1 *head=NULL,*p;
&head = (st1*)malloc(sizeof(st1));//分配头指针空间
&printf("***********链表操作************\n");
&printf("********请选择你的操作*********\n");
&printf("1)
创建链表&&&&
2) 增加节点****\n");
&printf("3)
删除节点&&&&
4) 改正节点****\n");
&printf("5)
查找节点&&&&
6) 链表排序****\n");
&printf("7)
链表逆序&&&&
8) 输出链表****\n");
&printf("*********9) 退出系统***********\n");
&scanf("%d",&a);
&if(9 == a)//用户选择9 就退出系统
&switch(a)//选择9以外的数字 进行链表操作
&case 1://创建链表
&&creat(head);
&case 2://插入学生信息
&&insert(head);
&case 3://删除学生信息
&&dele(head);
&case 4://修改信息
&&change(head);
&case 5://查找学生信息
&&printf("输入你要查找第几位学生:");
&&scanf("%d",&index);
find(head,index);//查找学生信息并返回 地址
&&printf("姓名:%s 年龄:%d
分数:%d\n",p-&name,p-&age,p-&score);
&case 6:& //排序
&&sort(head);
&&printf("成绩排序后");
&&print(head);//打印排序后的学生信息
&case 7://链表反转
&&reverse(head);
&case 8://打印信息
&&print(head);
&default :
&}while(1);
void creat(st1* head)
&st1 *p,*q;
&printf("输入学生人数:\n");
&scanf("%d",&n);
&for(i=0;i&n;i++)
&&printf("输入第%d个学生信息:\n",i+1);
(st1*)malloc(sizeof(st1));
&&printf("输入姓名:\n");
&&scanf("%s",&p-&name);
&&printf("输入年龄:\n");
&&scanf("%d",&p-&age);
&&printf("输入分数:\n");
&&scanf("%d",&p-&score);
&&printf("输入第%d个学生信息完成\n",i+1);
&&printf("\n");
&&if(0 == i)
&&&head-&next
&&&q-&next
&p-&next = NULL;
void print(st1* head)
&x = head-&
&printf("学生信息如下:\n");
&&printf("姓名:%s 年龄:%d
分数:%d\n",x-&name,x-&age,x-&score);
&&x = x-&next
&printf("\n");
st1* find(st1 *head,int idex)
&p = head-&
&while(p )
&&if(i&idex)
&&p = p-&next
st1* insert(st1* head)
&st1 *newst,*p;
&int i = 1;
&printf("要插入的位置:");
&scanf("%d",&index);//所要插入第几位学生信息
&p = head-&
&newst = (st1*)malloc(sizeof(st1));
&printf("输入姓名:\n");
&scanf("%s",&newst-&name);
&printf("输入年龄:\n");
&scanf("%d",&newst-&age);
&printf("输入分数:\n");
&scanf("%d",&newst-&score);
&printf("输入学生信息完成\n");
&if(1 == index)
&&st1 *q =
&&head-&next =
&&newst-&next =
&while( p )
&&if(i == (index-1))
&&&st1 *q =
&&&p-&next
&&&newst-&next
&&p = p-&next
void dele(st1* head)
&st1 *p,*q;
&int i =1 ;
&printf("输入删除第几位学生信息:");
&scanf("%d",&index);//所要删除第几位学生信息
&p = head-&
&if(1 == index)
&&head-&next&
&&free(p);
&&p = NULL;
&&if(i ==(index-1))
&&&p-&next
&&&free(q);
&&p = p-&next
&printf("第%d位学生信息已经删除\n",index);
void change(st1 *head)
&st1 *p = NULL;
&printf("输入修改第几位学生信息:\n");
&scanf("%d",&a);
&p =find(head ,a);//修改之前调用find函数找到该学生信息
&printf("输入姓名:\n");
&scanf("%s",&p-&name);
&printf("输入年龄:\n");
&scanf("%d",&p-&age);
&printf("输入分数:\n");
&scanf("%d",&p-&score);
&printf("输入学生信息完成\n");
void reverse(st1 *head)
&st1 *p = head-&next,*q;
&head-&next = NULL;
&while(p != NULL)
&&p-&next =
&&head-&next =
&print(head);//打印学生信息
void sort(st1 *head)
&st1 *p,*q;
&//交换score临时变量
&int temp1;//交换age临时变量
&char temp2[10];//交换name临时变量
&printf("选择1)按成绩,2)按年龄排序\n");
&scanf("%d",&m);
&switch(m)
&for(p =p != NULL; p = p-&
&&for (q =
p-&q != NULL; q = q-& next
&&&if(p-&score&q-&score)
&&&&q-&score
&&&&p-&score
&&&&q-&age
&&&&p-&age
&&&&strcpy(temp2,q-&name);
&&&&strcpy(q-&name,p-&name);
&&&&strcpy(p-&name,temp2);
&case 2:&&
&for(p =p != NULL; p = p-&
&&for (q =
p-&q != NULL; q = q-& next
&&&if(p-&age&q-&age)
&&&&q-&score
&&&&p-&score
&&&&q-&age
&&&&p-&age
&&&&strcpy(temp2,q-&name);
&&&&strcpy(q-&name,p-&name);
&&&&strcpy(p-&name,temp2);
有问题 欢迎指出,谢谢!!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 c语言单链表的创建 的文章

 

随机推荐