#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreatList(LinkList &L,int n)//創建鏈表
{ LNode *p; int i;
L=(LinkList)malloc(sizeof(LNode));
L->next==NULL;
for(i=0;i<n;i++){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&(p->data));
p->next=L->next;
L->next=p;
}
}
Status Listinsert(LinkList &L,int i, ElemType e)//鏈表插入
{ LNode *p,*s;
p=L; int j=0;
while(p&&j<i-1)
{
p=p->next; ++j;
}
if(!p||j>i-1)
return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=https://bbs.csdn.net/topics/e; s->next=p->next;
p->next=s;
return OK;
}
Status Listdelete(LinkList &L,int i, ElemType &e)//鏈表洗掉
{ int j=0;
LNode *p,*q; p=L;
while(p->next&&j<i-1)
{
p=p->next; ++j;
}
if(!(p->next)||j>i-1)
return ERROR;
p->next=q->next;
e=q->data; free(q);
return OK;
}
Status GetElem(LinkList &L,int i, ElemType &e)//鏈表的查找
{
LNode *p; p=L;
int j=1;
while(p&&j<i)
{
p=p->next; ++j;
if(!p||j>i)
return ERROR;
e=p->data;
return e;
}
}
Listprint(LinkList &L)//鏈表顯示
{
LNode *p; p=L;
while(p!=NULL){
printf("%d",p->data);
p=p->next;}
return OK;
}
int main()
{ int x,n,i,e;
LinkList H;
puts("************");
printf("-----操作選項------\n");
printf("1:創建鏈表\n");
printf("2:鏈表插入\n");
printf("3:鏈表洗掉\n");
printf("4:鏈表查找\n");
printf("5:鏈表顯示\n");
printf("************\n");
printf("按數字選擇要進行的操作\n");
scanf("%d",&x);
printf("\n");
switch(x)
{
case 1:
printf("輸入單鏈表的長度\n");
scanf("%d",&x);
CreatList(H,x);
Listprint(H);
break;
case 2:
printf("輸入需要插入位置的標號\n");
scanf("%d",&i);
printf("插入的值為\n");
scanf("%d",&e);
Listinsert(H,i,e);
Listprint(H);
break;
case 3:
printf("輸入需要洗掉位置的標號\n");
scanf("%d",&i);
Listdelete(H, i, e);
Listprint(H);
break;
case 4:
printf("輸入需要查找位置的標號\n");
scanf("%d",&i);
GetElem(H, i,e );
printf("%d",GetElem(H, i,e ));
break;
case 5:
Listprint(H);
Listprint(H);
break;
}
}
uj5u.com熱心網友回復:
void CreatList(LinkList &L,int n)//創建鏈表{ LNode *p; int i;
L=(LinkList)malloc(sizeof(LNode));
L->next==NULL;
uj5u.com熱心網友回復:
void CreatList(LinkList &L,int n)//創建鏈表{ LNode *p; int i;
p = L=(LinkList)malloc(sizeof(LNode));
for(i=0;i<n;i++){
p->next = (LinkList)malloc(sizeof(LNode));
scanf("%d",&(p->next->data));
p = p->next;
}
p->next = NULL;
}
uj5u.com熱心網友回復:

結果還是不對
uj5u.com熱心網友回復:
你這個問題多著呢一個一個的除錯好了再組合啊
先把create弄好,再弄print的
Listprint(LinkList &L)//鏈表顯示
{
if ( NULL == L || NULL == L->next ) return;
LNode *p =L->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
return OK;
}
insert 和 delete 也都有問題, 你先自己嘗試修改吧。
注意是鏈表第一個是空頭
uj5u.com熱心網友回復:
我剛開始學習,不太懂,你如果有時間的話幫我把存在問題的都改一下,我參考學習一下,非常感謝
uj5u.com熱心網友回復:
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreatList(LinkList &L,int n)//創建鏈表
{ LNode *p; int i;
L = (LinkList)malloc(sizeof(LNode));
//L->next==NULL;
L->next=NULL;
for(i=0;i<n;i++){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d", &(p->data));
p->next = L->next;
L->next = p;
}
}
Status Listinsert(LinkList &L,int i, ElemType e)//鏈表插入
{
LNode *p,*s;
p=L;
int j=0;
while(p&&j<i-1)
{
p = p->next;
++j;
}
if(!p || j > i-1) {
printf("Error position!\n");
return ERROR;
}
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next=s;
return OK;
}
Status Listdelete(LinkList &L,int i, ElemType &e)//鏈表洗掉
{
int j=0;
LNode *p,*q;
p = L;
while(p->next&&j<i-1)
{
p = p->next;
++j;
}
if(!(p->next)||j > i-1)
return ERROR;
#if 1
q = p->next;
p->next = p->next->next;
e = q->data;
free(q);
#else
p->next = q->next;
e=q->data;
free(q);
#endif
return OK;
}
Status GetElem(LinkList &L,int i, ElemType &e)//鏈表的查找
{
LNode *p;
p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i) {
printf("Error position!\n");
return ERROR;
}
e = p->data;
return e;
//}
}
//Listprint(LinkList &L)//鏈表顯示
Status Listprint(LinkList &L)//鏈表顯示
{
// LNode *p;
//p=L;
LNode *p = L->next;
while(p!=NULL){
printf("%d",p->data);
p=p->next;
}
return OK;
}
int main()
{ int x,n,i,e, ret;
LinkList H;
while (1) {
puts("************");
printf("-----操作選項------\n");
printf("1:創建鏈表\n");
printf("2:鏈表插入\n");
printf("3:鏈表洗掉\n");
printf("4:鏈表查找\n");
printf("5:鏈表顯示\n");
printf("************\n");
printf("按數字選擇要進行的操作\n");
scanf("%d",&x);
printf("\n");
switch(x)
{
case 1:
printf("輸入單鏈表的長度\n");
scanf("%d",&x);
CreatList(H,x);
Listprint(H);
break;
case 2:
printf("輸入需要插入位置的標號\n");
scanf("%d",&i);
printf("插入的值為\n");
scanf("%d",&e);
ret = Listinsert(H,i,e);
Listprint(H);
break;
case 3:
printf("輸入需要洗掉位置的標號\n");
scanf("%d",&i);
Listdelete(H, i, e);
Listprint(H);
break;
case 4:
printf("輸入需要查找位置的標號\n");
scanf("%d",&i);
//GetElem(H, i,e );
printf("%d",GetElem(H, i,e ));
break;
case 5:
Listprint(H);
Listprint(H);
break;
}
}
}
供參考~
建議樓主對比代碼找出自己的問題~
uj5u.com熱心網友回復:
#include <stdio.h>#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList ;
void CreatList(LinkList &L,int n)//創建鏈表
{ LNode *p; int i;
L = (LinkList)malloc(sizeof(LNode));
//L->next==NULL;
L->next=NULL;
for(i=n;i>0;i--){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d", &(p->data));
p->next = L->next;
L->next = p;
}
}
void MergList(LinkList &La, LinkList &Lb, LinkList &Lc)
{
LinkList pa,pb,pc;
pa=La->next;
pb=Lb->next;
Lc=pc=La;
while(pa&&pb){
if(pa->data<=pb->data){
pc->next=pa;pc=pa;pa=pa->next;
}
else{
pc->next=pb;pc=pb;pb=pb->next;
}
pc->next=pa?pa:pb;
free(Lb);
}
}
Status Listinsert(LinkList &L,int i, ElemType e)//鏈表插入
{
LNode *p,*s;
p=L;
int j=0;
while(p&&j<i-1)
{
p = p->next;
++j;
}
if(!p || j > i-1) {
printf("Error position!\n");
return ERROR;
}
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next=s;
return OK;
}
Status Listdelete(LinkList &L,int i, ElemType &e)//鏈表洗掉
{
int j=0;
LNode *p,*q;
p = L;
while(p->next&&j<i-1)
{
p = p->next;
++j;
}
if(!(p->next)||j > i-1)
return ERROR;
#if 1
q = p->next;
p->next = p->next->next;
e = q->data;
free(q);
#else
p->next = q->next;
e=q->data;
free(q);
#endif
return OK;
}
Status GetElem(LinkList &L,int i, ElemType &e)//鏈表的查找
{
LNode *p;
p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i) {
printf("Error position!\n");
return ERROR;
}
e = p->data;
return e;
//}
}
//Listprint(LinkList &L)//鏈表顯示
Status Listprint(LinkList &L)//鏈表顯示
{
// LNode *p;
//p=L;
LNode *p = L->next;
while(p!=NULL){
printf("%3d",p->data);
p=p->next;
}
printf("\n");
return OK;
}
int main()
{ int x,n,i,e, ret;
LinkList H;
LinkList La;
LinkList Lb;
LinkList Lc;
while (1) {
puts("************");
printf("-----操作選項------\n");
printf("1:創建鏈表\n");
printf("2:鏈表插入\n");
printf("3:鏈表洗掉\n");
printf("4:鏈表查找\n");
printf("5:鏈表輸出\n");
printf("6:鏈表合并\n");
printf("7:退出\n");
printf("************\n");
printf("按數字選擇要進行的操作\n");
scanf("%d",&x);
printf("\n");
switch(x)
{
case 1:
printf("輸入單鏈表的長度\n");
scanf("%d",&x);
CreatList(H,x);
// Listprint(H);//
break;
case 2:
printf("輸入需要插入位置的標號\n");
scanf("%d",&i);
printf("插入的值為\n");
scanf("%d",&e);
ret = Listinsert(H,i,e);
Listprint(H);
break;
case 3:
printf("輸入需要洗掉位置的標號\n");
scanf("%d",&i);
Listdelete(H, i, e);
Listprint(H);
break;
case 4:
printf("輸入需要查找位置的標號\n");
scanf("%d",&i);
//GetElem(H, i,e );
printf("%d\n",GetElem(H, i,e ));
break;
case 5:
Listprint(H);
break;
case 6:
printf("輸入單鏈表La的長度\n");
scanf("%d",&x);
CreatList(La,x);
printf("輸入單鏈表Lb的長度\n");
scanf("%d",&x);
CreatList(Lb,x);
MergList(La, Lb, Lc);
Listprint(Lc);
case 7:
exit(0);
}
}
}
uj5u.com熱心網友回復:
我根據您的代碼又修改之后沒問題了,然后我又寫了兩個鏈表合并的函式,但是結果不對,麻煩您再幫我修改修改,非常感謝uj5u.com熱心網友回復:
我根據您的代碼又修改之后沒問題了,然后我又寫了兩個鏈表合并的函式,但是結果不對,麻煩您再幫我修改修改,非常感謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/114572.html
標籤:C語言
上一篇:C語言結構體記憶體對齊問題
下一篇:如何對軟體串列進行分類
