大佬们救救。
写个链式表多项式,老是填一些奇怪的错误,能帮忙看看吗
#include <stdio.h>
typedef int datatype;
#include <stdlib.h>
#define NULL 0
typedef struct node
{
datatype xi;
datatype zhi;
struct node* next;
}node;
void init(node** head) {
*head = (node*)malloc(sizeof(node));
(*head)->next = NULL;
}
int length(node* head) {
node* p; int n = 0;
p = head;
while (p->next) {
p = p->next;
n++;
}
return n;
}
node* insert(node* head, int i, datatype xi,datatype zhi) {
int j = 0;
node* p;
init(&p);
p = head->next;
//j计数
//i是表示插入的位置
if (!p) {
}
while (j < i - 1 && p->next != NULL) {
p = p->next;
j = j++;
}
if (j == i - 1) {
node* q = (node*)malloc(sizeof(node));
init(&q);
q->xi = xi;
q->zhi = zhi;
q->next = p->next;
p->next = q;
return head;
}
}
int find(node* head, int i, datatype* x,datatype*y) {
int j = 0;
node* p = head->next;
while (j < i && p->next != NULL) {
j = j++;
p = p->next;
}
if (j == i) {
*x = p->xi;
*y = p->zhi;
return 1;
}
return 0;
}
node* deleted(node* head, int i) {
node* p = head->next;
int j = 0;
while (j < i - 1 && p->next != NULL) {
j = j++;
p = p->next;
}if (j == i - 1) {
p->next = (p->next)->next;
return head;
}
}
/*node* sort(node* head1) {
node* p;
node* q;
int j=0;
int i = length(head1);
int k;
init(&p);
init(&q);
for (k = 1; i-1;k++) {
q = head1->next;
while (j < i && q->next != NULL) {
if (q->zhi < (q->next)->zhi) {
p->next = q->next;
q->next = q;
q = p;
}
j = j++;
p = p->next;
}
}
return head1;
}
int sum(node* head1, node* head2) {
node* head3;
node* p;
node* q;
init(&p);
init(&q);
init(&head3);
int i, j, len1, len2 = 0;
int count = 1;
p = head1->next;
q = head2->next;
len1 = length(p);
len2 = length(q);
for (j = 0; j <= len1; j++) {
for (i = 0; i <= len2; i++) {
if (p->zhi = q->zhi)
{
head3->xi = p->xi +q->xi;
head3->zhi = p->zhi;
head3 = head3->next;
p = p->next;
q = q->next;
}
else
{
head3 = p;
head3 = head3->next;
head3 = q;
head3 = head3->next;
p = p->next;
q = q->next;
}
}
}
sort(head3);
int len3 = length(head3);
int x, y;
for (i = 1; len3; i++) {
find(head3, i, &x, &y);
printf("%5dx^%d", x, y);
if (i < len3)
{
printf(" +");
}
}
return 1;
}
int subtract(node* head1, node* head2) {
node* head3;
node* p;
node* q;
init(&p);
init(&q);
init(&head3);
int i, j, len1, len2 = 0;
int count = 1;
p = head1->next;
q = head2->next;
len1 = length(p);
len2 = length(q);
for (j = 0; j <= len1; j++) {
for (i = 0; i <= len2; i++) {
if (p->zhi = q->zhi)
{
head3->xi = p->xi + q->xi;
head3->zhi = p->zhi;
head3 = head3->next;
p = p->next;
q = q->next;
}
else
{
head3 = p;
head3 = head3->next;
head3 = q;
head3 = head3->next;
p = p->next;
q = q->next;
}
}
}
sort(head3);
int len3 = length(head3);
int x, y;
for (i = 1; len3; i++) {
find(head3, i, &x, &y);
printf("%5dx^%d", x, y);
if (i < len3)
{
printf(" +");
}
}
return 1;
}*/
int main() {
node* head1;
node* head2;
int len, x,y;
init(&head1);
init(&head2);
len = length(head1);
printf("%5d\n", len);
insert(head1, 1, 3, 3);
insert(head1, 2, 5, 2);
insert(head1, 3, 8, 1);
printf("%5d\n", length(head1));
for (int i = 1; i <= length(head1); i++) {
find(head1, i, &x,&y);
printf("%5dx^%d", x,y);
if(i<length(head1))
{
printf(" +");
}
}
printf("\n");
insert(head2, 1, 3, 4);
insert(head2, 2, 8, 1);
insert(head2, 3, 6, 3);
// sort(head2);
for (int i = 1; i <= length(head2); i++) {
find(head2, i, &x, &y);
printf("%5dx^%d", x, y);
if (i < length(head2))
{
printf(" +");
}
}
}
/*1234
2134
2314
2341
3241
3421
3421
4321
4321
4321
*/
爆这个错误