一道链表c语言题,求救!!!

作者&投稿:蒸彩 (若有异议请与网页底部的电邮联系)
C语言链表一道题~

(*p)是一个结构体,不能执行++,D中的p是一个指针变量,可以++

以前写的你参考下:
单向链表的建立、排序、销毁重复数据、逆序。
#include
#include
typedef struct link
{
int data;
struct link *next;
}NODE;
NODE *creast(int n)
{
NODE *head,* new,*p;
int i=1;
head=(NODE*)malloc(sizeof(NODE));
if(head)
{
printf("input the %dth number:",i);
scanf("%d",&head->data);
head->next=NULL;
p=head;
}
else
exit(0);
while(i<n)
{
new=(NODE*)malloc(sizeof(NODE));
new->next=NULL;
printf("input the %dth number:",++i);
scanf("%d",&new->data);
p->next=new;
p=new;
}
return head;
}
void output(NODE *head)
{
NODE *p;
p=head;
do
{
printf("%d",p->data);
p=p->next;
}while(p&&printf("-->"));
printf("
");
}
NODE *contrary(NODE *head)
{
NODE *p,*q;
p=head;
while(p->next)
{
q=p->next;
p->next=q->next;
q->next=head;
head=q;
}
return head;
}
NODE *destroy(NODE *head)
{
NODE *p,*q;
p=head;
while(p->next)
{
q=p->next;
if(p->data==q->data)
{
p->next=q->next;
free(q);
}
else
p=p->next;
}
return head;
}
NODE *bubblesort (NODE *head)
{
NODE *endpt,*p,*p1,*p2;
p1=(NODE *)malloc(sizeof(NODE));
p1->next=head;
head=p1;
for(endpt=NULL;endpt!=head;endpt=p)
{
for(p=p1=head;p1->next->next!=endpt;p1=p1->next)
{
if(p1->next->data>p1->next->next->data)
{
p2=p1->next->next;
p1->next->next=p2->next;
p2->next=p1->next;
p1->next=p2;
p=p1->next->next;
}
}
}
p1=head;
head=head->next;
free(p1);
p1=NULL;
return head;
}
void main()
{
int n;
NODE *head;
printf("input the number you want to bulid(n>0):");
scanf("%d",&n);
head=creast(n);
printf("before sort:");
output(head);
printf("after sort:");
head=bubblesort(head);
output(head);
printf("after destroy:");
head=destroy(head);
output(head);
printf("after contaty:");
head=contrary(head);
output(head);
}

链表节点就是一个值加指向下一个值的指针构成的(双向链表多一个指向上一节点的指针)。

完整的程序如下(可以正确输出1342)

#include<stdio.h>

#define N 4

struct node
{
int x;
struct node *next;
};

void print(struct node *p)
{
while(p != 0)
{
printf("%4d", p->x);
p = p->next;
}
printf("\n");
}

struct node *fun(struct node *h)
{
struct node *p1,*p2,*p3;
p1 = h;
p2 = p1->next;
while(p2)
{
if(p2->x%2)
{
p3 = p2;
p1->next = p2->next;
p2 = p1->next;
p3->next = h;
h=p3;
}
else
{
p1 = p2; p2 = p2->next;
}
}
return h;
}

main()
{
struct node a[N] = {{4},{3},{2},{1}},*head = a;
int i,num;
for(i = 0;i < N-1;i++) a[i].next = &a[i+1];
a[i].next=0;
head = fun(head);
print(head);
}

我发现你中间2空涉及链表节点移动的你都填了并且是正确的啊, 你应该是懂的哈。

前面2个空其实很简单,27 判断是否为有效节点,即指针是否为空; 28 输出 节点的x值

分太少了


求大神救急,编写C语言程序,内容是建立一个链表,还有链表的插入与删除...
include<iostream> using namespace std;typedef struct lnode { int data;lnode *next;}lnode,*linklist;int m;int listinsert(linklist &l,int i,int e)\/\/在带头节点的单链表中第i个元素插入元素e { int j=0;linklist p,s;p=new lnode;p=l;s=new lnode;while(p&&jnext;++j;} ...

C语言问题,求大神解答
\/\/Node* head表示头指针 \/\/头指针指向头结点,头结点的值无用,头结点的指针指向链表内第一个元素 \/\/当NULL == head->next时链表为空,当NULL == head时链表为无效链表 include <stdio.h> include <stdlib.h> typedef struct Node { int val;struct Node* next;}Node;void* _malloc(size_...

C语言高手求C语言【急!!等】
\/\/双链表排序,方便。单链表进行排序,是谁出的题目啊,够狠。不过已经解决了,希望能对你有所帮助。#include "stdio.h"#include <malloc.h>#include <string.h>#include <conio.h>#include <stdlib.h>struct node{ int ID; char name[20]; int a1; int a2; int a3; int total; struct node *next;}...

C语言问题:怎样实现对链表中两个结点的交换
有2方法:第一,找到要交换的2个结点,将2个结点内的数据交换就完成2个结点交换.因为2个结点不同就是2个结点内数据有区别.第二,拿掉2个结点,并保持链表完好,再将2结点前后倒置,插到原位置.当然,如果是双向链表要麻烦些,但思路是一致的.

请问这个链表主函数怎么写?(用C语言,可以从键盘输入n个数实现)_百度知 ...
哥们你这是数据结构上的吧。。。学数据结构要灵活。。。这里给你一个建立链表的程序:(以SDUTOJ 2116题为例题)include <iostream>using namespace std;class List{ public: int data;\/\/数据域,用来记录数据 List *next;\/\/指着域,用来记录它下一个节点的地址 \/\/访问这个变量能找...

C语言问题:这个链表我想用goto实现功能的选择,但不知为什么总是跳不到...
我觉得你应该学会调适,在适当的地方加上输出语句,判断到底是哪里出了错,比如在类成员函数里加上printf();

C语言,创建一个链表并赋值1、2、3、4、5,麻烦把全部程序写下
_tmain(int argc, _TCHAR* argv[]){ Dlink *l,*s1;Dlink *s=(Dlink *)malloc(sizeof(Dlink));l=s;for(int i=0;i<5;i++){ s->data=i+1;s1=(Dlink *)malloc(sizeof(Dlink));s->next=s1;s=s1;} s->next=NULL;\/\/数据就保存到以l为头结点的链表中了 return 0;} ...

c语言求助 输入n个学生的考试成绩,求出其中最高分、最低分以及超过平均...
你想输入多少输入多少,我就输入4个分数测试。include<stdio.h>#include<malloc.h>typedef struct stud{ int score; struct stud *next;}STD;STD *insertScore(STD *stdHead,STD *stdTail);\/\/录入成绩void printfSTD(STD *stdHead);\/\/打印链表数据int *tjSTD(STD *stdHead);\/\/统计 返回...

...喊到一个数就出局,最后剩下的人,用c语言用动态链表编程
这个问题是有名的约瑟夫问题。假设有n个人参加报数,依次编号1~n。从编号1开始依次报数,从1报到m,报到m的人出列,剩下来的人重新开始报数,报到m的人出列,如此重复直到所有人都出列为止。最后出列的人原来的编号是多少?链表程序如下:include <stdio.h>#include<stdlib.h>struct node{int num;...

c语言问题,为什么链表操作过程中对于结构体指针,都要用malloc来开辟内存...
定义的结构体指针只是说明这个指针是指向这个结构的,但并未给它分配内存空间,这就类似于声明,只是告诉系统我这个指针是干什么用的。链表是由一个个的结点链接起来的,而每个结点都是需要内存空间来存储数据的,所以你每新建一个结点,都需要开辟一个空间来存储数据。希望对你有用~...

明水县15265142547: c语言关于链表的一道题 -
寸秦普鲁: #include<stdio.h> #include<stdlib.h>//整数单链表 struct numList {int num;numList* next; };//函数原型声明 numList* create(int n); int add(numList* head, int n); void sort(numList* head); void output(numList* head);void main() {char* p;p=...

明水县15265142547: 一道链表c语言题,求救!!! -
寸秦普鲁: 链表节点就是一个值加指向下一个值的指针构成的(双向链表多一个指向上一节点的指针).完整的程序如下(可以正确输出1342)#include#define N 4 struct node { int x; struct node *next; }; void print(struct node *p) { while(p != 0) { printf("%...

明水县15265142547: 求程序,C语言链表的一个题目 -
寸秦普鲁: #include#include#include typedef struct student { char name[22]; char No[22]; int score; }Item; typedef struct node { Item item; struct node *next; }Node; typedef Node *List; void menu() { printf("=====================\n"); printf("1.输入学生信...

明水县15265142547: 一道关于链表的C语言题 -
寸秦普鲁: #include#include struct node { int data; struct node *next; }; int main() { int n, i, j, t; int flag = 0, k = 0, x; struct node *head, *add, *p, *q, *r,*t1; head = (struct node*)malloc(sizeof(struct node)); scanf("%d", &n); head->next = NULL; t1 = head; for (i = 1; ...

明水县15265142547: 急求一个C语言程序 题目要求 建立一个简单的链表即可 越少越好 程序越短越好 谢谢了 -
寸秦普鲁: #include<stdio.h> #include<malloc.h>typedef struct node{int data;struct node *next; }NODE; NODE* print(NODE* head) //输出链表 {while(head){printf("%d ",head->data);head=head->next;}return 0; } NODE *creat( NODE *head) //创建链...

明水县15265142547: 一道数据结构 用C语言建立单链表的编程题目,求助. -
寸秦普鲁: 这个程序是以前做的,看起来复杂,其实是太多的判断和提示内容而已,你看看主函数,再运行一下,再看看创建链表的函数,关键部分并不多,应该不难看懂,另外模块我做的比较细,有些函数你不必理会,希望能帮到你,谢谢#include <...

明水县15265142547: C语言链表一道题,跪求大神 -
寸秦普鲁: //删除所有无效数值结点的函数原型:void deleteneg(PNODE head) { PNODE p,q;p = head;q = head; while ( p->next != NULL ){if( p->next->data{ p->next = p->next->next; p = q; } q = p; p = p->next;} }

明水县15265142547: 一道C语言有关链表的简单问题 -
寸秦普鲁: 以下程序完全用C写的,希望能够满足你的要求,如果需要一边插入一边排序,可以参照插入排序的代码自行编写一个.当然,如果用C++,可以精简一些#include <stdio.h>#include <stdlib.h>#include <malloc.h>/*微机版本可能需要加上这个头文...

明水县15265142547: C语言关于链表的一道编程题 -
寸秦普鲁: //刚写的code,测试通过,如果有疑问,欢迎交流//先输入n//然后再输入n个字符#include<stdio.h>#include<stdlib.h> struct Node{ char value; struct Node * next; }; void free_list(struct Node *root){ if(root==NULL) return ; free_list(root->next); free(root);...

明水县15265142547: C语言 链表 这个题目怎么做? -
寸秦普鲁: /*【问题】(13) 程序运行时,第1行输出 (13) .b,a输出9,s(9)=3<9<5=1<5=1 a、0 1 b、9 1 c、0 0 d、9 0(14) 程序运行时,第2行输出 (14) .b,开始n=4,n%2=0,if不成立,输出4,当n--后,n=3,n%2=1,if成立,执行continue,后面printf不执行...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网