這個C程序執行不了- -



/*單鏈表的各種操作*/

# define null 0

typedef char ElemType;  /*字符型數據*/

typedef struct LNode
{
ElemType data;
struct LNode *next;
};

setnull(struct LNode **p);
int length(struct LNode **p);
ElemType get(struct LNode **p,int i);
int locate(struct LNode **p,ElemType x);
void insert(struct LNode **p,ElemType x,int i);
void delete(struct LNode **p,int i);
void display(struct LNode **p);

main()
{
struct LNode *head; /*定義靜態變量*/
int select,x1,x2,x3;
int i,n;
int m,g;
char e,y;

head=setnull(&head); /*建立鏈表並設置為空表*/
printf("請輸入數據長度:");
scanf("%d",&n);
for(i=1;i<n;i++)
{
printf("將數據插入到單鏈表中:");
scanf("%c",y);
insert(&head,y,i);
display(&head);

printf("select 1 求長度 length()\n");
printf("select 2 取結點 get()\n");
printf("select 3 求值查找 locate()\n");
printf("select 4 刪除結點 delete()=\n");
printf("input your choice: ");
scanf("%d",&select);
switch(select)
{
case 1:
{
x1=length(&head);
printf("輸出單鏈表的長度%d ",x1);
display(&head);
}break;
case 2:
{
printf("請輸入要取得的結點:");
scanf("%d",&m);
x2=get(&head,m);
printf(x2);
display(&head);
}break;

case 3:
{
printf("請輸入要查找的數據:");
scanf("%c",&e);
x3=locate(&head,e);
printf(x3);
display(&head);
}break;
case 4:
{
printf("請輸入要刪除的結點:");
scanf("%d",&g);
delete(&head,g);
display(&head);
}break;
}
}
}

setnull(struct LNode **p)
{
*p=null;
}

int length(struct LNode **p)
{
int n=0;
struct LNode *q=*p;
while(q!=null)
{
n++;
q=q->next;
}
return(n);
}

ElemType get(struct LNode **p,int i)
{
int j=1;
struct LNode *q=*p;
while(q<i&&q!=null)
{
q=q->next;
j++;
}
if(q!=null)
return(q->data);
else 
printf("位置參數不准確!\n");
}


int locate(struct LNode **p,ElemType x)
{
int j=1;
struct LNode *q=*p;
while(q!=null&&q->data!=x)
{
q=q->next;
j++;
}
if(q==null)
return(-1);
else
return(j);
}

void insert(struct LNode **p,ElemType x,int i)
{
int j=1;
struct LNode *s,*q;
s=(struct LNode *)malloc(sizeof(struct LNode));
s->data=x;
q=*p;
if(i==1)
{
s->next=q;
p=s;
}
else
{
while(j<i-1&&q->next!=null)
{
q=q->next;
j++;
}
if(j==i-1)
{
s->next=q->next;
q->next=s;
}
else
printf("error!\n");
}
}

void delete(struct LNode **p,int i)
{   
int j=1;
struct LNode *q=*p,*t;
if(i==1)
{
t=q;
*p=q->next;
}
else
{
while(j<i-1&&q->next!=null)
{
q=q->next;
j++;
}
if(q->next!=null&&j==i-1)
{
t=q->next;
q->next=t->next;
}
else
printf("位置參數不正確!");
}
if(t=null)
free(t);
}


void display(struct LNode **p)
{
struct LNode *q;
q=*p;
printf("單鏈表顯示:");
if(q==null)
printf("這是一個空鏈表!");
else if (q->next=null)
printf("%c\n",q->data);
else
{
while(q->next!=null)
{
printf("%c->",q->data);
q=q->next;
}
printf("%c\n",q->data);
}
}






我用VC++6.0可以編譯通過此程序,但每次執行都出現下面這個對話框終止程序怎么辦?

"0x00404184"指令引用的"0xffffffcc"內存。該內存不能為"written".

26 个解决方案

#1


vs2008里面錯誤一大堆。。。 跟以前的格式都不一樣了。。
慢慢調

#2


大哥我很懶,程序太長了,坐沙發幫你頂

#3


樓主你確定能在VC++6.0上可以編譯通過次程序?我編譯提示14個錯誤5個警告
感覺你像給出的改錯題,我再仔細看看

#4



 錯誤好多哦, 改改看先...

#5


沒出錯啊,我這邊編譯通過喇- -

#6


不調試不知道 調式了嚇一大跳 你這能編譯過關?
delete()這種函數也可以?
setnull(struct LNode **p);
這也可以?
樓主先弄個能編譯的上來

#7


難道我的vc6.0編譯器有問題,我這個程序是c程序,不是c++,各位不要保存為**.cpp啊

#8


引用 5 樓 tomorrowzm 的回復:
沒出錯啊,我這邊編譯通過喇- -


寒,不能吧……

#9



 是C程序???

 那這樣能用嗎? head=setnull (&head);

#10


.....

#11


    head=setnull(&head); /*建立鏈表並設置為空表*/       //去掉head=

                printf(x2);               //printf(char變量)??
    
                printf(x3);                  //printf(int)???

#12


不好意思,大學一年級學的C語言,當時學的很淺薄,也沒怎么去實踐,讓大家笑話了,現在在學數據結構,這是一個點鏈表程序,現在我想搞清楚一個問題,單鏈表里面的數據q->data是用char類型,還是int類型呢?

#13



 自己定義的啥就是啥咧, 你定義的為 char

#14


我想在單鏈表的數據域q->data里面放姓氏,如:zhang->li->zhao->wang

但c語言沒有字符串類型,要用什么數據類型?,是要搞一個字符串數組嗎?具體怎么實現?

#15


head節點沒有分配空間

#16


引用 14 樓 tomorrowzm 的回復:
我想在單鏈表的數據域q->data里面放姓氏,如:zhang->li->zhao->wang 

但c語言沒有字符串類型,要用什么數據類型?,是要搞一個字符串數組嗎?具體怎么實現?


搞一個字符串數組也可以,還有一種方法就是用指針,不過用完了別忘了釋放。。。。。

這里有個完整的,應該有幫助。。
http://yx-postbox.blog.163.com/blog/static/603140502008230102756773/

#17


幫頂

#18


錯誤一大堆啊!沒法改!你看看我以前寫的一個吧!

//帶頭結點的建表,判空,刪除,插入,找x相同值的結點數,就地逆置,用一主函數實現
#include <iostream>

using namespace std;

template <class ElemType>
class List
{
public:
   List();
   void InitList();//建表
   void Show() const;//輸出鏈表
   bool IsEmpty();//判空
   void Delete(int i);//刪除
   void Insert(ElemType e,int i);//插入
     void FindEqual(int x);//找x相同的節點數
        List<int> *Getnode (int n);//取任意節點
   void Reverse();//逆置
   ~List();
private:
   ElemType elem;
   List *head;//頭指針
   List *next;//后繼
   int length;
};

template <class ElemType>
List<ElemType>::List()
{
elem=0;
head=NULL;
next=NULL;
length=0;
}

template <class ElemType>
void List<ElemType>::InitList()
{
List*p1,*p2;
head=new List;
p1=head;
p2=new List;
int count=0;
cout<<"請輸入數值(-1 to quit): ";
cin>>p2->elem;
while(p2->elem!=-1)
    {
   p1->next=p2;
   p1=p2;
   ++count;
   p2=new List;
   cin>>p2->elem;
}
p1->next=NULL;
length=count;
}

template <class ElemType>
void List<ElemType>::Show() const
{
if(head!=NULL)
{
   List *p=head->next;
     cout<<"顯示鏈表的值為: ";
     while(p)
   {
    cout<<p->elem<<" ";
    p=p->next;
   }
   cout<<endl;
}
else
   cout<<"表為空表!"<<endl;
}

template <class ElemType>
bool List<ElemType>::IsEmpty()
{
if(length==0)
   return true;
else
   return false;
}

template <class ElemType>
void List<ElemType>::Insert(ElemType e,int i)
{
if(!IsEmpty())
{
   List *p=head;
   int j=0;
   while(p && j<i-1)
   {
    p=p->next;
    ++j;
   }
   if(!p || j>i-1)
    cout<<"插入失敗!"<<endl;
   else
   {
    List *s=new List;
    s->elem=e;
    s->next=p->next;
    p->next=s;
    ++length;
    cout<<"插入成功!"<<endl;
   }
}
else
   cout<<"不能插入,表為空表!"<<endl;
}

template <class ElemType>
void List<ElemType>::Delete(int i)
{
int e;
if(!IsEmpty())
{
   List *p=head;
     int j=0;
   while(p && j<i-1)
   {
    p=p->next;
    ++j;
   }
   if(!p && j>i-1)
    cout<<"刪除失敗!"<<endl;
   else
   {
            e=p->next->elem;
    p->next=p->next->next;
    --length;
    cout<<"刪除成功!"<<endl;
    cout<<"刪除的元素是"<<e<<endl;
   }
}
else
   cout<<"不能刪除,表為空表!"<<endl;
}
template <class ElemType>
void List<ElemType>::FindEqual(int x)
{
if(!IsEmpty())
{
   List *p;
   int i=0;
   bool flag=false;
   for(p=head->next;p!=NULL;p=p->next)
   {
    ++i;
    if(p->elem==x)
    {
     flag=true;
       cout<<"第"<<i<<"個節點的值與"<<x<<"相等"<<endl;
    }
   }
   if(!flag)
    cout<<"沒有與"<<x<<"相同的值!"<<endl;
}
else
   cout<<"表為空表!"<<endl;
}

template <class Elemtype>
List<int> * List<Elemtype>::Getnode(int n)
{
int i=0;
List* p;
p=head;
while(p && i<n)
{
   p=p->next;
   ++i;
}
return p;
}

template <class ElemType>
void List<ElemType>::Reverse()
{
int center=length/2,i;
ElemType temp;
List *p1,*p2;s
p1=head;
    for(i=length;i>center;--i)

      p2=Getnode(i);
   temp=p1->next->elem;
   p1->next->elem=p2->elem;
   p2->elem=temp;
   p1=p1->next;
}
cout<<"逆置成功!"<<endl;
//Show();
}

template <class ElemType>
List<ElemType>::~List()
{
while(head!=NULL)

   delete head;
   head=head->next;
}
}

int main()
{
char ch;
List<int> obj;
int e,i;
cout<<"\t\t1.創建表"<<endl;
cout<<"\t\t2.插入值"<<endl;
cout<<"\t\t3.刪除值"<<endl;
cout<<"\t\t4.相同值"<<endl;
cout<<"\t\t5.輸出表"<<endl;
cout<<"\t\t6.逆置表"<<endl;
cout<<"\t\t0.退出"<<endl;
do
{
   cout<<"請選擇操作: ";
   cin>>ch;
   switch(ch)
   {
   case '1':
    obj.InitList();
    break;
   case '2':
    cout<<"請輸入要插入的值: ";
    cin>>e;
    cout<<"請輸入要插入的位置: ";
    cin>>i;
    obj.Insert(e,i);
    break;
   case '3':
    cout<<"請輸入要刪除的節點: ";
    cin>>i;
    obj.Delete(i);
    break;
   case '4':
    cout<<"請輸入要查找相同的值: ";
    cin>>i;
    obj.FindEqual(i);
    break;
   case '5':
    obj.Show();
    break;
   case '6':
    obj.Reverse();
    break;
   case '0':
    cout<<"\t操作完畢!"<<endl;
            break;
   default :
    cout<<"輸入錯誤,請重新輸入: ";
            break;
   }
}while(ch!='0');
    system("pause");
return 0;
}
  


#19


先從頭到尾過一遍,看看函數、語法等是不是c語言的東西。

等到語法沒問題了,然后看看邏輯上,慢慢調試。

#20


參考18樓 一步一步改吧

#21


還有你們都用什么工具來編譯*.c程序啊?為什么我上面C程序在VC 6.0編譯通過的情況下,你們說我的代碼錯誤一大堆呢?

#22


是VC 6.0啊,通不過的

#23


Compiling...
b.c
D:\workspace\VC6.0\demo\b.c(29) : warning C4047: '=' : 'struct LNode *' differs in levels of indirection from 'int '
D:\workspace\VC6.0\demo\b.c(30) : warning C4013: 'printf' undefined; assuming extern returning int
D:\workspace\VC6.0\demo\b.c(31) : warning C4013: 'scanf' undefined; assuming extern returning int
D:\workspace\VC6.0\demo\b.c(102) : warning C4047: '<' : 'struct LNode *' differs in levels of indirection from 'int '
D:\workspace\VC6.0\demo\b.c(133) : warning C4013: 'malloc' undefined; assuming extern returning int
D:\workspace\VC6.0\demo\b.c(139) : warning C4047: '=' : 'struct LNode ** ' differs in levels of indirection from 'struct LNode *'
D:\workspace\VC6.0\demo\b.c(183) : warning C4013: 'free' undefined; assuming extern returning int
D:\workspace\VC6.0\demo\b.c(35) : warning C4700: local variable 'y' used without having been initialized
D:\workspace\VC6.0\demo\b.c(111) : warning C4715: 'get' : not all control paths return a value

b.obj - 0 error(s), 9 warning(s)



我上面的代碼編譯后
沒有錯誤,只有警告而已!
你們怎么會說有很多錯誤?

#24


錯誤太多了,受不了

#25


日啊,但我這邊的確是編譯通過了啊,只是有9個警告而已- -

#26


^_^

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



C程序的執行過程 Linuxc - 執行c程序 c程序的執行過程 C程序的執行 C程序編譯執行過程 c#怎么讓程序停止執行? C#執行EXE程序 C++程序的執行過程 Android開機執行C程序 C程序編譯執行過程
 
粤ICP备14056181号  © 2014-2021 ITdaan.com