链接列表分配

时间:2015-11-20 02:52:32

标签: c

您好我有一项任务要求我创建一个链接列表 并用0到10的整数填充它。我已经这样做了。 我遇到的问题是与最后一部分有关 一个单独的用户定义函数,它传递一个指针 指向列表的头部。当我这样做并尝试printf 列表中的整数我得到一个错误,说它不是 结构或联合中的某些东西。请帮忙,我很难过 如何做下一步。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    struct list
    {                //creating structure
       int num;
       struct list *next;  //used to point to next node on list
    };

    struct list *head;             //used to navigate the linked list
    struct list *current;
    struct list *new;
    head=malloc(sizeof(struct list));  //gives memory space to start off linked list
    head->num=0;
    head->next=NULL;
    current=head;                      //current equals head now so that one can easily navigate the list with the loop

    int c=0;                      //loop counter int
    while(c<11)      //populates the linked list with integers
    {
       new=malloc(sizeof(struct list));
       current->next=new;
       if(current->next == NULL)    //checks to see if memory created
       printf("This has failed");
       current=new;
       current->num=c+1;
       c++;
    }
    struct list **headptr=&head;   //PROBLEM: I'm assuming here is where I'm having the issue.
    print(headptr);
}

void printList(struct list** head) {
    int x;  //loop counter
    struct list *current;
    while (x<11) {
        if(x==0)
           printf("%d",head.num);
        current
        printf("%d",current->num);
    }
}

1 个答案:

答案 0 :(得分:0)

试试此代码

我在您的代码中进行了一些更改..

1.在这里你使用两个函数因此我们需要全局声明结构。这样两个函数都可以使用结构原型

2.C语言有自上而下类型的方法因此我们需要在程序顶部给出import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; import android.app.ActionBar; import android.app.FragmentTransaction; // unused statement public class Main extends FragmentActivity implements ActionBar.TabListener { private ViewPager viewPager; private TabsFragmentPagerAdapter mAdapter; private ActionBar actionBar; // Tab titles private String[] tabs = {"Top Rated", "Games", "Movies"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Initilization viewPager = (ViewPager) findViewById(R.id.pager); actionBar = getActionBar(); mAdapter = new TabsFragmentPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(mAdapter); actionBar.setHomeButtonEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // Adding Tabs for (String tab_name : tabs) { actionBar.addTab(actionBar.newTab().setText(tab_name) .setTabListener(this)); } } } 函数的原型或在顶部自定义函数

3.在printList块中,我们必须添加语句while(c<11)以识别current->next=NULL函数中使用的列表的结束位置

4.当我们使用printList函数时,必须进行转换。

5.不需要按地址发送malloc。它增加了程序的复杂性。所以我只是将那部分更改为更简单的方法

headptr