# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct Node NODE;
typedef struct Node * PNODE;
struct Node
{
int data; //資料域
struct Node * pNext; //指標域
}; //NODE等價于struct Node PNODE等價于struct Node *
//函式宣告
PNODE create_list(void); //創建鏈表
void traverse_list(PNODE pHead); //遍歷鏈表
//bool is_empty(PNODE pHead); //判斷鏈表是否為空
//int length_list(PNODE); //求鏈表長度
//bool insert_list(PNODE pHead, int pos, int val); //在pHead所指向鏈表的第pos個節點的前面插入一個新的結點,該節點的值是val, 并且pos的值是從1開始
//bool delete_list(PNODE pHead, int pos, int * pVal); //洗掉鏈表第pos個節點,并將洗掉的結點的值存入pVal所指向的變數中, 并且pos的值是從1開始
//void sort_list(PNODE); //對鏈表進行排序
int main(void)
{
PNODE pHead = NULL; //等價于 struct Node * pHead = NULL;
//int val;
pHead = create_list(); //create_list()功能:創建一個非回圈單鏈表,并將該鏈表的頭結點的地址付給pHead
traverse_list(pHead);
//insert_list(pHead, -4, 33);
/*if ( delete_list(pHead, 4, &val) )
{
printf("洗掉成功,您洗掉的元素是: %d\n", val);
}
else
{
printf("洗掉失敗!您洗掉的元素不存在!\n");
}
*/
traverse_list(pHead);
//int len = length_list(pHead);
//printf("鏈表的長度是%d\n", len);
//sort_list(pHead);
//traverse_list(pHead);
/* if ( is_empty(pHead) )
printf("鏈表為空!\n");
else
printf("鏈表不空!\n");
*/
system("pause");
return 0;
}
PNODE create_list(void)
{
int len; //用來存放有效節點的個數
int i;
int val; //用來臨時存放用戶輸入的結點的值
//分配了一個不存放有效資料的頭結點
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if (NULL == pHead)
{
printf("分配失敗, 程式終止!\n");
exit(-1);
}
PNODE pTail = pHead;
pTail->pNext = NULL;
printf("請輸入您需要生成的鏈表節點的個數: len = ");
scanf("%d", &len);
for (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->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead;
}
void traverse_list(PNODE pHead)
{
PNODE p = pHead->pNext;
while (NULL != p)
{
printf("%d ", p->data);
p = p->pNext;
}
printf("\n");
return;
}
1>------ 已啟動生成: 專案: text7, 配置: Debug Win32 ------
1>生成啟動時間為 2020/4/21 18:15:42。
1>InitializeBuildStatus:
1> 正在對“Debug\text7.unsuccessfulbuild”執行 Touch 任務。
1>ClCompile:
1> text7.c
1>d:\vs2010test\text7\text7\text7.c(71): error C2275: “PNODE”: 將此型別用作運算式非法
1> d:\vs2010test\text7\text7\text7.c(6) : 參見“PNODE”的宣告
1>d:\vs2010test\text7\text7\text7.c(71): error C2146: 語法錯誤: 缺少“;”(在識別符號“pTail”的前面)
1>d:\vs2010test\text7\text7\text7.c(71): error C2065: “pTail”: 未宣告的識別符號
1>d:\vs2010test\text7\text7\text7.c(71): warning C4047: “=”:“int”與“PNODE”的間接級別不同
1>d:\vs2010test\text7\text7\text7.c(72): error C2065: “pTail”: 未宣告的識別符號
1>d:\vs2010test\text7\text7\text7.c(72): error C2223: “->pNext”的左側必須指向結構/聯合
1>d:\vs2010test\text7\text7\text7.c(82): error C2275: “PNODE”: 將此型別用作運算式非法
1> d:\vs2010test\text7\text7\text7.c(6) : 參見“PNODE”的宣告
1>d:\vs2010test\text7\text7\text7.c(82): error C2146: 語法錯誤: 缺少“;”(在識別符號“pNew”的前面)
1>d:\vs2010test\text7\text7\text7.c(82): error C2065: “pNew”: 未宣告的識別符號
1>d:\vs2010test\text7\text7\text7.c(82): warning C4047: “=”:“int”與“PNODE”的間接級別不同
1>d:\vs2010test\text7\text7\text7.c(83): error C2065: “pNew”: 未宣告的識別符號
1>d:\vs2010test\text7\text7\text7.c(83): warning C4047: “==”:“void *”與“int”的間接級別不同
1>d:\vs2010test\text7\text7\text7.c(88): error C2065: “pNew”: 未宣告的識別符號
1>d:\vs2010test\text7\text7\text7.c(88): error C2223: “->data”的左側必須指向結構/聯合
1>d:\vs2010test\text7\text7\text7.c(89): error C2065: “pTail”: 未宣告的識別符號
1>d:\vs2010test\text7\text7\text7.c(89): error C2223: “->pNext”的左側必須指向結構/聯合
1>d:\vs2010test\text7\text7\text7.c(89): error C2065: “pNew”: 未宣告的識別符號
1>d:\vs2010test\text7\text7\text7.c(90): error C2065: “pNew”: 未宣告的識別符號
1>d:\vs2010test\text7\text7\text7.c(90): error C2223: “->pNext”的左側必須指向結構/聯合
1>d:\vs2010test\text7\text7\text7.c(91): error C2065: “pTail”: 未宣告的識別符號
1>d:\vs2010test\text7\text7\text7.c(91): error C2065: “pNew”: 未宣告的識別符號
1>
1>生成失敗。
1>
1>已用時間 00:00:00.35
========== 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 ==========
為什么在vc6里面可以運行的代碼,出現在vs2010中就出現了這種情況!
uj5u.com熱心網友回復:
標準不一樣,typedef struct Node NODE;
typedef struct Node * PNODE;
放在結構體宣告后面。
uj5u.com熱心網友回復:
struct Node
{
int data; //資料域
struct Node * pNext; //指標域
}; //NODE等價于struct Node PNODE等價于struct Node *
這個結構體宣告放在上面typedef的前面試一下。
在我的環境下你的代碼編譯沒問題,編譯運行都是可以的。
uj5u.com熱心網友回復:
我試了,也是同樣的錯誤,所以我才定義在前面
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77422.html
標籤:C語言
上一篇:結構體相關程式
下一篇:輸出亂碼問題
