cccsiqi47 2016-04-19 15:14 采纳率: 50%
浏览 1789
已采纳

求大神指点这段程序为什么一直有错误,真的不知道怎么处理了。。。

程序的要求是线性表的插入和删除
程序如下:
#include
#include
struct node{
int data;
node *next;
};
node *create_sort(void)
{
node *p1,*head=0;
int a;
printf("建立一条有序链表,请输入数据,以-1结束:");
scanf("%d,&a);
while (a!=-1){
p1=new node;
p1->data=a;
head=insert(head,p1);
scanf("%d,&a);
}return(head);
}
void print(const node *head)
{
const node *p;
p=head;
printf("链表上各个节点的数据为:\n");
while(p!=NULL){
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
node *delete_one_node(node *head,int num)
{
node *p1,*p2;
if(head==NULL){
printf("链表为空,无节点可删!\n");
return(NULL);
}
if (head->data==num){
p1=head;
head=head->next;
delete p1;
printf("删除了一个节点!\n");
}
else{
p2=p1=head;
while(p2->data!=num&&p2->next!=NULL){
p1=p2;
p2=p2->next;
}
if(p2->data==num){
p1->next=p2->next;
delete p2;
printf("删除了一个节点!\n");
}
else printf("%d链表上没找到要删除的节点!\n",num);
}
return(head);
}
void deletechain(node *h)
{
node *p1;
while(h){
p1=h;
h=h->next;
delete p1;
}
printf("已释放链表的节点空间!\n");
}

int count(node*head)
{
int n;
node *p;
p=head;
n=0;
while(p!=NULL){
n=n+1;
p=p->next;
}return(n);
}

node *delete_k_node(node *head,int k)
{
int j=1;
node *p,*p1;
if(head==NULL){
printf("链表为空,无节点可删!\n");
return(NULL);
}
p=head;
if(k==1){
p=head;
head=head->next;
delete p;
printf("删除了第一个节点!\n");
}
else{
p=find(head,k-1);
if(p->next!=NULL)
{
p1=p->next;
p->next=p1->next;
delete p1;
printf("删除了第%d个节点!\n",k);
}
return(head);
}
}
void main(void)
{
node *head;
int num;
int k;
head=create_sort();
print(head);
printf("节点数:%d\n,count(head));
printf("输入要删除节点上的序号!\n");
scanf("%d,&num);
head=delete_k_node(head,k);
print(head);
printf("输入要删除节点上的整数!\n");
scanf("%d,&num);
head=delete_one_node(head,num);
print(head);
printf("输入要插入的整数!\n");
scanf("%d",&num);
head=insert(head,num);
print(head);
}

调试错误显示如下:
h:\mydocuments\csq\csq.cpp(12) : error C2001: newline in constant

h:\mydocuments\csq\csq.cpp(13) : error C2143: syntax error : missing ')' before 'while'
h:\mydocuments\csq\csq.cpp(13) : error C2143: syntax error : missing ';' before '{'
h:\mydocuments\csq\csq.cpp(16) : error C2065: 'insert' : undeclared identifier
h:\mydocuments\csq\csq.cpp(16) : error C2440: '=' : cannot convert from 'int' to 'struct node *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
h:\mydocuments\csq\csq.cpp(17) : error C2001: newline in constant
h:\mydocuments\csq\csq.cpp(18) : error C2143: syntax error : missing ')' before '}'
h:\mydocuments\csq\csq.cpp(18) : error C2143: syntax error : missing ';' before '}'
h:\mydocuments\csq\csq.cpp(98) : error C2065: 'find' : undeclared identifier
h:\mydocuments\csq\csq.cpp(98) : error C2440: '=' : cannot convert from 'int' to 'struct node *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
h:\mydocuments\csq\csq.cpp(116) : error C2001: newline in constant
h:\mydocuments\csq\csq.cpp(117) : error C2146: syntax error : missing ')' before identifier 'printf'
h:\mydocuments\csq\csq.cpp(118) : error C2001: newline in constant
h:\mydocuments\csq\csq.cpp(119) : error C2146: syntax error : missing ')' before identifier 'head'
h:\mydocuments\csq\csq.cpp(122) : error C2001: newline in constant
h:\mydocuments\csq\csq.cpp(123) : error C2146: syntax error : missing ')' before identifier 'head'
h:\mydocuments\csq\csq.cpp(127) : error C2440: '=' : cannot convert from 'int' to 'struct node *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.

  • 写回答

7条回答

  • 小灸舞 2016-04-20 13:00
    关注
     #include<iostream>
    using namespace std;
    
    struct node{
        int data;
        node *next;
    };
    
    node* find(node *head, int k)
    {
        node *p = head;
        node *pre = head;
        while(p && k-- > 0)
        {
            pre = p;
            p = p->next;
        }
        if(p == NULL)
            printf("未找到该元素位置\n");
        return pre;
    }
    
    node *insert(node *head, int elem)
    {
        node *p = head;
        node *pre = head;
        if(p == NULL)//链表为空,插入第一个元素
        {
            node *p1 = new node;
            p1->data = elem;
            p1->next = NULL;
            head = p1;
        }
        else
        {
            while(p)
            {
                if(p->data > elem || p->next == NULL)//如果找到了要找的位置或者已经到最后的节点了
                {
                    node *p1 = new node;
                    p1->data = elem;
                    if(p == head)
                    {
                        if( p->data > elem)
                        {
                            head = p1;
                            p1->next = p;
                        }
                        else
                        {
                            p1->next = p->next;
                            p->next = p1;
                        }
                    }
                    else
                    {
                        if(p->data < elem)
                        {
                            p->next = p1;
                            p1->next = NULL;
                        }
                        else
                        {
                            p1->next = p;
                            pre->next =p1;
                        }
                    }
                    break;
                }
                pre = p;
                p = p->next;
            }
        }
        return head;
    }
    
    node *create_sort(void)
    {
        node *p1,*head=0;
        int a;
        printf("建立一条有序链表,请输入数据,以-1结束:");
        scanf("%d",&a);
        while (a!=-1){
            head=insert(head,a);
            scanf("%d",&a);
        }
        return(head);
    }
    void print(const node *head)
    {
        const node *p;
        p=head;
        printf("链表上各个节点的数据为:\n");
        while(p!=NULL){
            printf("%d\t",p->data);
            p=p->next;
        }
        printf("\n");
    }
    node *delete_one_node(node *head,int num)
    {
        node *p1,*p2;
        if(head==NULL){
            printf("链表为空,无节点可删!\n");
            return(NULL);
        }
        if (head->data==num){
            p1=head;
            head=head->next;
            delete p1;
            printf("删除了一个节点!\n");
        }
        else{
            p2=p1=head;
            while(p2->data!=num&&p2->next!=NULL){
                p1=p2;
                p2=p2->next;
            }
            if(p2->data==num){
                p1->next=p2->next;
                delete p2;
                printf("删除了一个节点!\n");
            }
            else printf("%d链表上没找到要删除的节点!\n",num);
        }
        return(head);
    }
    void deletechain(node *h)
    {
        node *p1;
        while(h){
            p1=h;
            h=h->next;
            delete p1;
        }
        printf("已释放链表的节点空间!\n");
    }
    int count(node*head)
    {
        int n;
        node *p;
        p=head;
        n=0;
        while(p!=NULL){
            n=n+1;
            p=p->next;
        }return(n);
    }
    node *delete_k_node(node *head,int k)
    {
        int j=1;
        node *p,*p1;
        if(head==NULL){
            printf("链表为空,无节点可删!\n");
            return(NULL);
        }
        p=head;
        if(k==1){
            p=head;
            head=head->next;
            delete p;
            printf("删除了第一个节点!\n");
        }
        else{
            p=find(head,k-1);
            if(p->next!=NULL)
            {
                p1=p->next;
                p->next=p1->next;
                delete p1;
                printf("删除了第%d个节点!\n",k);
            }
    
        }
        return(head);
    }
    void main(void)
    {
        node *head;
        int num;
        int k;
        head=create_sort();
        print(head);
        printf("节点数:%d\n",count(head));
        printf("输入要删除节点上的序号!\n");
        scanf("%d",&k);
        head=delete_k_node(head,k);
        print(head);
        printf("输入要删除节点上的整数!\n");
        scanf("%d",&num);
        head=delete_one_node(head,num);
        print(head);
        printf("输入要插入的整数!\n");
        scanf("%d",&num);
        head=insert(head,num);
        print(head);
    }
    

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示