|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
各位大哥,大姐,求助啊!!一下是小弟写的数据结构中关于链表的实现,可是却遇到了一个问题,就是delete_list函数的问题!尝试了好几次但是始终没有找到到底是为什么大家帮忙看看!- # include <stdio.h>
- # include <malloc.h>
- # include <stdlib.h>
- typedef struct Node
- {
- int date;
- struct Node * pNext;
- }*PNODE, NODE;
- PNODE Create_list(void);
- void Show_list(PNODE pHead);
- void sort_list(PNODE pHead);
- int Length(PNODE pHead);
- void empty_list(PNODE pHead);
- void insert_list(PNODE pHead);
- void delete_list(PNODE pHead);
- void Show_list(PNODE pHead)
- {
- PNODE p = pHead->pNext;
- while (NULL != p)
- {
- printf("%3d", p->date);
- p = p->pNext;
- }
- printf("\n");
-
- return ;
- }
- int Length(PNODE pHead)
- {
- int len = 0;
- PNODE p = (PNODE)malloc(sizeof(NODE));
- p = pHead;
- while (NULL != p->pNext)
- {
- ++len;
- p = p->pNext;
- }
- return len;
- }
- void sort_list(PNODE pHead)
- {
- int t;
- int len = Length(pHead);
-
- PNODE p = pHead->pNext;
- PNODE q = pHead->pNext;
-
- for (p; NULL!=p; p=p->pNext)
- for (q=p->pNext; NULL!=q; q=q->pNext)
- {
- if (p->date < q->date)
- {
- t = q->date;
- q->date = p->date;
- p->date = t;
- }
- }
- return;
- }
- void empty_list(PNODE pHead)
- {
- if (NULL == pHead->pNext)
- {
- printf("空表");
- }
- else
- {
- printf("链表的长度为%d!", Length(pHead));
- }
- }
- PNODE Create_list(void)
- {
- int len;
- int val;
- PNODE pHead = (PNODE)malloc(sizeof(NODE));
- if (NULL == pHead)
- {
- printf("分配失败!");
- exit(-1);
- }
-
- PNODE pTail = pHead;
- pTail->pNext = NULL;
-
- printf("Please input the length to the LIST: length = ");
- scanf ("%d", &len);
-
-
- for (int i=0; i<len; i++)
- {
- printf("请输入第%d个节点的数值", i+1);
- scanf ("%d", &val);
-
- PNODE pNew = (PNODE)malloc(sizeof(NODE));
-
- pTail->pNext = pNew;
- pNew->date = val;
- pNew->pNext = NULL;
- pTail = pNew;
- }
-
- return pHead;
- }
- void insert_list(PNODE pHead, int pos, int num )
- {
- PNODE p = pHead;
-
- for (int i=0; i<pos-1&&NULL != p;)
- {
- p = p->pNext;
- i++;
- }
-
- PNODE pDate = (PNODE)malloc(sizeof(NODE));
-
- if (NULL == pDate)
- {
- printf("分配失败!退出程序!");
- exit(-1);
- }
-
- pDate->date = num;
- pDate->pNext = p->pNext;
- p->pNext = pDate;
-
- return ;
- }
- void delete_list(PNODE pHead, int pos, int * val)
- {
- printf("请输入要删除的位置:pos:");
- scanf("%d", &pos);
- PNODE p = pHead;
- for (int i=0 ; i<pos-1&&NULL != p->pNext; i++)
- {
- p=p->pNext;
- }
- *val = p->pNext->date;
- p->pNext = p->pNext->pNext;
- free(p->pNext);
- p->pNext = NULL;
- return ;
- }
- int main (void)
- {
- int pos, num;
- int val;
- PNODE pHead = (PNODE)malloc(sizeof(NODE));
-
- pHead = Create_list();
-
- empty_list(pHead);
-
- int len = Length(pHead);
- printf("%d\n", len);
-
- Show_list(pHead);
- sort_list(pHead);
- Show_list(pHead);
- printf("输入插入位置及插入值:");
- scanf("%d %d", &pos, &num );
-
- insert_list(pHead, pos, num );
- Show_list(pHead);
- delete_list(pHead, pos, &val);
- printf("\n%d", val);
- Show_list(pHead);
- return 0;
- }
复制代码 这个整体应该没有什么问题!主要是delete_list()的问题!
- void delete_list(PNODE pHead, int pos, int * val) //val作为删除的那个数据的返回值
- {
- printf("请输入要删除的位置:pos:");
- scanf("%d", &pos);
- PNODE p = pHead;
- for (int i=0 ; i<pos-1&&NULL != p->pNext; i++)
- {
- p=p->pNext;
- }
- *val = p->pNext->date;
- p->pNext = p->pNext->pNext;
- free(p->pNext);
- p->pNext = NULL;
- return ;
- }
复制代码 我不知道到底怎么了!求各位高手赐教!!!!!
|
|