首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于数组的有关问题,

2012-03-28 
关于数组的问题,求救!!能不能设置一个数组,先不确定它的长度,然后每次进来一个数就依次放到数组里(第0位,

关于数组的问题,求救!!
能不能设置一个数组,先不确定它的长度,然后每次进来一个数就依次放到数组里(第0位,第1位,第2位。。。),直到所有的数都存放进来,也就确定了数组的长度。
或者不用数组也行,只要能实现上述功能。请高人指点!!

[解决办法]
参考
http://blog.csdn.net/fm0517/article/details/4254099
http://www.cplusplus.com/reference/stl/vector/
[解决办法]
根据你的需要,你自己取舍。

C/C++ code
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define TRUE  1#define FALSE 0typedef struct Node                                    /* 定义一个结构体变量 用来存储节点的数据域和指针域 */{    int dat;    struct Node* pNext;}NODE, *pNODE;pNODE create_list(void);                            /* 创建一个链表 */int is_empty(pNODE pHead);                            /* 判断链表是否为空 */void travers_list(pNODE pHead);                        /* 遍历一个链表 */int delete_node(pNODE pHead);                        /* 删除一个节点 */int insert_list(pNODE pHead);                        /* 插入一个链表 */void sort_list(pNODE pHead);                        /* 给链表中的数值排序 */int length_list(pNODE pHead);                        /* 计算链表的长度 */int main(void){    pNODE pHead = NULL;    pHead = create_list();    printf("链表的长度为:%d\n",length_list(pHead));    sort_list(pHead);    travers_list(pHead);    printf("\n");    delete_node(pHead);    if (delete_node(pHead))    {        printf("删除成功!\n");    }    printf("链表的长度为:%d\n",length_list(pHead));    travers_list(pHead);    printf("\n");    insert_list(pHead);    printf("链表的长度为:%d\n",length_list(pHead));    travers_list(pHead);    printf("\n");    return 0;}pNODE create_list(void){    int val = 0;    int len = 0;    pNODE pHead = (pNODE)malloc(sizeof(NODE));    if (NULL == pHead)    {        printf("内存分配失败!\n");        exit(-1);                                    /* 内存分配失败,退出程序 */    }    pNODE pTail = pHead;                            /* 定义一个临时的头节点指针,因为这个临时的头结点指针会变化,                                                    就是通过这个和后面的节点联系起来的 */    pTail->pNext = NULL;    printf("请输入节点数 len = ",len);    scanf("%d",&len);    for (int i = 0; i < len; i++)    {        printf("输入第%d个节点的值:", i + 1);        scanf("%d", &val);        pNODE pNew = (pNODE)malloc(sizeof(NODE));        if (NULL == pNew)        {            printf("内存分配失败!\n");            exit(-1);        }        pNew->dat = val;                                /* 给节点赋值 */        pTail->pNext = pNew;                            /* 让每个新节点都连接在最后一个节点的后面 */        pNew->pNext = NULL;                                /* 算给每个新的节点的指针初始化吧 */        pTail = pNew;                                    /* 再让最后一个节点指针指向此新节点 */    }    return pHead;}void travers_list(pNODE pHead){    pNODE p = pHead->pNext;                                /* 定义一个临时的节点指针 */    while (NULL != p)                                    /* 判断是否存在此节点 */    {        printf("%d ", p->dat);        p = p->pNext;                                    /* p一直指向此节点*/    }    printf("\n");}int is_empty(pNODE pHead){    if (NULL == pHead->pNext)    {        return TRUE;    }    else    {        return FALSE;    }}int delete_node(pNODE pHead){    int num = 0;    int len = length_list(pHead);    if (is_empty(pHead))    {        printf("此链表是空的,删除节点失败!\n");        return FALSE;    }    else    {        printf("请输入被删除节点的序号num = ");        scanf("%d", &num);        if (num <= 0 || num > len)        {            printf("删除的节点序号范围有错,删除失败!\n");            return FALSE;        }        pNODE p = pHead;                            /* 不能直接使用头结点,因为头结点是不能被改变的 */        pNODE r = NULL;                                        for (int i = 0; i < num - 1; i++)            /* 让p指向被删节点的前一个节点 */        {            p = p->pNext;        }        r = p->pNext;                                /* 用这个临时的指针指向要被删除的节点 */        p->pNext = r->pNext;                        /* 让被删节点的前一个节点的pNext指向被删节点的后面一个节点 */        free(r);    }    return TRUE;}int insert_list(pNODE pHead){    int num,val;    num = val = 0;    pNODE p = pHead;    pNODE pNew = (pNODE)malloc(sizeof(NODE));    printf("输入插入的位置num = ",num);    scanf("%d",&num);    if (num < 1 || num > length_list(pHead) + 1)    {        printf("插入位置不对,插入失败!\n");        return FALSE;    }    else    {        printf("输入插入的值 val = ",val);        scanf("%d",&val);        for (int i = 0; i < num - 1; i++)        {            p = p->pNext;        }        pNODE r = NULL;                                        /* 临时指针 */        r = p->pNext;                                        /* 用这个临时变量指向插入位置 */        p->pNext = pNew;        pNew->pNext = r;        pNew->dat = val;    }    return TRUE;}void sort_list(pNODE pHead){    int i,j,t;    int len = length_list(pHead);    pNODE p,q;    p = pHead;    for (i = 0,p = p->pNext; i < len - 1;i++,p = p->pNext)    {        for (j = i + 1,q = p->pNext; j < len; j++,q = q->pNext)        {            if (p->dat > q->dat)        /* 类似于数组中的a[i] > a[j]*/            {                t = p->dat;                p->dat = q->dat;                q->dat = t;            }        }    }}int length_list(pNODE pHead){    int i = 0;    pNODE p = pHead;    while(p = p->pNext)        i++;    return i;} 


[解决办法]

探讨
引用:
c:链表/线性,先申请一段,不够再申请一段,效率好些

c++: stl

能不能说一下c++: stl是什么东西,是个类吗?

热点排行
Bad Request.