C语言数据结构问题,求高手解答下,谢谢了

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

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

void input(NODE **a)

{
NODE *p,*q;
int i;
printf("输入链表的元素,0表示结束\n");
*a=NULL;
while(1)
{
scanf("%d",&i);
if(i==0)
break;
p=(NODE *)malloc(sizeof(NODE));
p->x=i;
p->next=NULL;
if(*a=NULL)
*a=q=p;
else
{
q->next=p;
q=q->next;

}
}

}

void output(NODE *a)
{
int i;
for(i=0;a!=NULL;i++,a=a->next)
{
printf("%7d",a->x);
if((i+1)%10==0)
printf("\n");

}
printf("\n");
}

void disa(NODE *a,NODE **b)
{
NODE *r,*p,*q;
p=a;
r=*b=(a==NULL)?NULL:a->next;
while(p!=NULL && p->next!=NULL)
{ q=p->next;
p->next=q->next;
r->next=q;
r=q;
p=p->next;
}
r->next=NULL;
}

void main()
{
NODE *a,*b;
input(&a);
printf("链表A的元素为:\n");
output(a);
disa(a,&b);
printf("链表A的元素(奇数序号节点)为:\n");
output(a);
printf("链表B的元素(偶数序号节点)为:\n");
output(b);
}
编了个小程序,运行死机,不知道原因,检查了很多遍,求高手解答!谢谢

if (*a = NULL)
改成
if (*a == NULL)
即可。

#include<stdio.h>
#include<malloc.h>
typedef struct node {
int x;
struct node *next;
}NODE;

void input(NODE **a) {
NODE *p, *q;
int i;
printf("输入链表的元素,0表示结束\n");
*a = NULL;
while (1) {
scanf("%d", &i);
if (i == 0)
break;
p = (NODE*)malloc(sizeof(NODE));
p->x = i;
p->next = NULL;
if (*a == NULL) //这里==============
* a = q = p;
else {
q->next = p;
q = q->next;
}
}
}

void output(NODE *a) {
int i;
for (i = 0; a != NULL; i++, a = a->next) {
printf("%7d", a->x);
if ((i + 1) % 10 == 0)
printf("\n");
}
printf("\n");
}

void disa(NODE *a, NODE **b) {
NODE *r, *p, *q;
p = a;
r = *b = (a == NULL) ? NULL : a->next;
while (p != NULL && p->next != NULL) {
q = p->next;
p->next = q->next;
r->next = q;
r = q;
p = p->next;
}
r->next = NULL;
}

void main() {
NODE *a, *b;
input(&a);
printf("链表A的元素为:\n");
output(a);
disa(a, &b);
printf("链表A的元素(奇数序号节点)为:\n");
output(a);
printf("链表B的元素(偶数序号节点)为:\n");
output(b);
}
温馨提示:内容为网友见解,仅供参考
无其他回答

关于数据结构(C语言版)的两个问题
首先,定义一个字符数组`stack`和一个整型变量`top`。`stack`用于存储当前遍历到的括号,`top`表示`stack`的当前栈顶索引。接着,从字符串的第二个字符开始遍历(由于第一个字符默认为左括号),判断当前遍历到的字符:如果为左括号`(`,则将其压入`stack`中,并将`top`加一。如果为右括号`)`,...

关于数据结构的问题,用C语言描述
广义表的概念,是数据结构里第一次出现的。它是线性表或表元素的有限序列,构成该结构的每个子表或元素也是线性结构的,所以,这一章也归入线性结构中。本章的考查重点有:1.多维数组中某数组元素的position求解。一般是给出数组元素的首元素地址和每个元素占用的地址空间并组给出多维数组的维数,然后要求你求出该数组中...

c语言版 数据结构问题
1.找到结构的头(H)和尾(R)2.下面是伪代码 while(H在R之前) do begin if data_at[H]!=data_at[R] then return false;\/\/肯定不对称 H<-后继;R<-前驱;end;return true;时间复杂度O(strlen(s))既为表长

c语言的数据结构,求大神们帮帮忙。无法理解这题的函数实现方式,能一...
一个main函数,一个取子串函数substr,一个求字符串反转的函数f31. f31函数用到了函数的递归调用。substr函数就是在s串中从pos位置开始取len长度的字串,然后赋给字符串t。f31每次都是把串s的第一个字符赋给t,剩下的部分赋给s,f31(s)求得剩余部分的反转字符,第一字符再连接到反转字符之...

悬赏,急。编程达人请进。帮帮忙解释一下这个C语言数据结构的函数...
1、定义新链表c,用于存放结果 2、取多项式a的头结点qa,qa->next为a的第一项。3、对b进行同样操作得到b第一项地址qb->next。4、a的每一项与b的每一项都做运算,两个多项式相乘的结果存入c while(qa->next != 0)\/\/遍历a { while(qb->next != 0)\/\/遍历b { 系数相乘 幂相加 存入c...

谁懂数据结构C语言,帮个忙吧,我整了好久都没整好,会的帮我一下谢了
include "malloc.h"define MAXSIZE 50 typedef struct { int data[MAXSIZE];int last;}SeqList;\/*顺序表的初始化*\/ SeqList *init_SeqList(){ SeqList *L;L=malloc(sizeof(SeqList));L->last=-1;return L;} \/*插入数据*\/ void Insert_SeqList(SeqList *L,int i,int x){ int ...

急解一个数据结构的题(C语言)
void MatrixMul(a,b,m,n,k,c) \/*实矩阵相乘*\/int m,n,k; \/*m:矩阵A的行数, n:矩阵B的行数, k:矩阵B的列数*\/double a[],b[],c[]; \/*a为A矩阵, b为B矩阵, c为结果,即c = AB *\/{ int i,j,l,u; \/*逐行逐列计算乘积*\/ for (i=0; i<=m-1; i++) for (j=0; j<=k...

c语言 数据结构 本人不才看不出问题 ,希望各位大虾指教,谢谢、、请说...
这里应该加一个return 0才符合函数定义!} void DispList(sequenlist *L) \/\/输出线性表L。要返回值有什么用哦?{ int j;for(j=0; j<L->last; j++){ printf("%c",L->data[j]);} printf("\\n"); \/\/最后加个换行 } 逻辑问题请LZ再仔细研究一下,有问题再问 ...

c语言的数据结构的存储 问题...
include<iostream.h> struct T { int w;union T2 { char c; int i; double d; } U;};void main(){ cout<<sizeof(int)<<", "<<sizeof(double)<<endl;cout<<sizeof(T)<<endl;} 输出:4 8 16 说T类型所占空间是16,不知道为什么,知道的请解释下。不过你的答案里没有16这个选项...

C语言\/数据结构高手进!帮我看一下这道关于用链表处理得出两集合差集的问...
LA是指针的指针,作为参数传进来是为了能够对LA指针做修改,因为最后结果要保存在LA中,那么,当LA中的第一个元素被减去以后,LA就要指向下一个元素了,所以要用指针的指针。总之,一般用指针的指针,就是为了能修改指针本身的值。填空:pa = *LA;NULL != pb && pa->elem != pb->elem NULL !

相似回答