user-0 提问: 线性表的问题  大神们帮我改改吧  谢谢了

回复:
user: user-0
content: 哇  谢谢了  终于找到Insert循环错了 其他也改过来了

user: user-1
content: #include<stdio.h> #include<malloc.h> #define MAXSIZE 50 #define N 10 typedef int elemtype; typedef struct {     elemtype data[MAXSIZE];     int last; }Sequenlist;  Sequenlist* InitList(Sequenlist*L) {     L=(Sequenlist*)malloc(sizeof(Sequenlist));     L->last=0;     return(L); }  int Judge(Sequenlist*L) {     if(L->last==0)     {         printf("List is empty.\n");     }     return 0; }  int Insert(Sequenlist*L) {     int x,i;     if(L->last==MAXSIZE-1)     {         printf("overflow.\n");         return 0;     }     else     {         printf("Input %d data:\n");         for(i=L->last;i<L->last+N;i++)         {             scanf("%d",&x);             L->data[i]=x;             L->last++;         }     }     for(i=0;i<L->last;i++)       printf("%d",L->data[i]);     return 0; }  int DelItem(Sequenlist*L,int i) {     int j;     if(L->last==0)     {         printf("List is empty.\n");         return 0;     }     else if((i<1)||(i>=L->last))     {         printf("Delete item fail.\n");         return 0;     }     else     {         for(j=i;j<=L->last-1;j++)             L->data[j-1]=L->data[j];         L->last--;         for(i=0;i<L->last;i++)           printf("%d",L->data[i]);         return 0;      } }  int InsItem(Sequenlist*L,int i,elemtype item) {     int j;     if(L->last==0)     {         printf("List is empty.\n");         return 0;     }     else if((i<1)||(i>L->last))     {         printf("Insert item fail.\n");         return 0;     }     else     {         for(j=L->last;j>=i;j--)             L->data[j]=L->data[j-1];         L->last++;         for(i=0;i<L->last;i++)            printf("%d",L->data[i]);         return 0;     } }  int LocItem1(Sequenlist*L,elemtype item) {     int i,j;     j=L->last;     if(j==0)     {         printf("List is empty.\n");         return 0;     }     for(i=0;i<j;i++)     {         if(L->data[i]==item)         {             return(i+1);         }     }     printf("The item is not in this sequenlist");     return 0; }  int LocItem2(Sequenlist*L,elemtype item) {     int i,j;     j=L->last;     if(j==0)     {         printf("List is empty.\n");         return 0;     }     for(i=0;i<j;i++)     {         if(L->data[i]==item)         {             return(i+1);         }     }     printf("The item is not in this sequenlist");     return 0; }  int LocItem3(Sequenlist*L,elemtype item) {     int i,j;     j=L->last;     if(j==0)     {         printf("List is empty.\n");         return 0;     }     for(i=0;i<j;i++)     {         if(L->data[i]==item)         {             printf("前驱为%d",L->data[i-1]);             printf("后继为%d",L->data[i+1]);         }     }     printf("The item is not in this sequenlist");     return 0; }  int main() {     int i,item;     Sequenlist*L;    Sequenlist* InitList(Sequenlist*L);     int Judge(Sequenlist*L);     printf("依次在顺序表尾部(第n+1位，n位线性表长度)插入数据元素\n");     int Insert(Sequenlist*L);     printf("删除第i个元素,请输入i:");     scanf("%d",&i);     printf("删除第%d个元素\n",i);     int DelItem(Sequenlist*L,int i);     printf("在线性表的第i位插入数据item,请输入i和item:");     scanf("%d%d",&i,&item);     int InsItem(Sequenlist*L,int i,elemtype item);     printf("在线性表中查找值为item的元素在第几位,请输入item:");     scanf("%d",&item);     int LocItem1(Sequenlist*L,elemtype item);     printf("在线性表中查找值为item的元素在第几位,请输入item:");     scanf("%d",&item);     int LocItem2(Sequenlist*L,elemtype item);     printf("查找线性表中，值为item的元素的前驱元素以及后继元素的值,请输入item:");     scanf("%d",&item);     int LocItem3(Sequenlist*L,elemtype item);     return 0;  }

user: user-2
content: 因为循环完了  i的值就等于j了，意思就是i=L->last。。。、。。。。所以if条件成立，LZ还是认真点吧

user: user-0
content: 为什么后面两个if语句都会在一起执行 int LocItem1(Sequenlist*L,elemtype item) {     int i,j;     j=L->last;     if(j==0)     {         printf("List is empty.\n");         return 0;     }     for(i=0;i<j;i++)     {         if(L->data[i]==item)         {             printf("%d在第%d位\n",item,i+1);          }     }     if(i>=j)         printf("The item is not in this sequenlist");     return 0; }

user: user-0
content: int LocItem1(Sequenlist*L,elemtype item) {     int i,j;     j=L->last;     if(j==0)     {         printf("List is empty.\n");         return 0;     }     for(i=0;i<j;i++)     {         if(L->data[i]==item)         {             printf("%d在第%d位\n",item,i+1);          }     }     if(i>=j)         printf("The item is not in this sequenlist");     return 0; }  为什么最后两个if语句都会执行啊  #include<stdio.h> #include<malloc.h> #define MAXSIZE 50 #define N 10 typedef int elemtype; typedef struct {     elemtype data[MAXSIZE];     int last; }Sequenlist;  Sequenlist*InitList(Sequenlist*L) {     L->last=0;     return(L); }  int Judge(Sequenlist*L) {     if(L->last==0)     {         printf("List is empty.\n");     }     return 0; }  int Insert(Sequenlist*L) {     int x,i;     if((*L).last==MAXSIZE-1||(*L).last+N>MAXSIZE)     {         printf("overflow.\n");         return 0;     }     else     {         printf("Input %d datas:",N);         for(i=(*L).last;i<(*L).last+N;i++)         {             scanf("%d",&x);             (*L).data[i]=x;         }         (*L).last=(*L).last+N;     }     for(i=0;i<(*L).last;i++)       printf("%d  ",(*L).data[i]);     return 0; }  int DelItem(Sequenlist*L,int i) {     int j;     if(L->last==0)     {         printf("List is empty.\n");         return 0;     }     else if((i<1)||(i>=L->last))     {         printf("Delete item fail.\n");         return 0;     }     else     {         for(j=i;j<L->last;j++)             L->data[j-1]=L->data[j];         L->last--;         for(i=0;i<L->last;i++)           printf("%d  ",L->data[i]);         return 0;      } }  int InsItem(Sequenlist*L,int i,elemtype item) {     int j;     if(L->last==0)     {         printf("List is empty.\n");         return 0;     }     else if((i<1)||(i>L->last))     {         printf("Insert item fail.\n");         return 0;     }     else     {         for(j=L->last;j>=i;j--)             L->data[j]=L->data[j-1];         L->data[i-1]=item;         L->last++;         for(i=0;i<L->last;i++)            printf("%d  ",L->data[i]);         return 0;     } }  int LocItem1(Sequenlist*L,elemtype item) {     int i,j;     j=L->last;     if(j==0)     {         printf("List is empty.\n");         return 0;     }     for(i=0;i<j;i++)     {         if(L->data[i]==item)         {             printf("%d在第%d位\n",item,i+1);          }     }     if(i>=j)         printf("The item is not in this sequenlist");     return 0; }  int LocItem2(Sequenlist*L,elemtype item) {     int i,j;     j=L->last;     if(j==0)     {         printf("List is empty.\n");         return 0;     }     for(i=0;i<j;i++)     {         if(L->data[i]==item)         {             printf("%d在第%d位\n",item,i+1);         }     }     if(i>=j)         printf("The item is not in this sequenlist");     return 0; }  int LocItem3(Sequenlist*L,elemtype item) {     int i,j;     j=L->last;     if(j==0)     {         printf("List is empty.\n");         return 0;     }     for(i=0;i<j;i++)     {         if(L->data[i]==item)         {             if(L->data[i-1]==L->data[0])                 {                     printf("第一个没有前驱\n");                     printf("%d后继为%d\n",L->data[i],L->data[i+1]);                 }             else if(L->data[i-1]==L->data[L->last-1])                 {                     printf("%d前驱为%d\n",L->data[i],L->data[i-1]);                     printf("最后一个没有后继\n");                 }             else                 {                     printf("%d前驱为%d\n",L->data[i],L->data[i-1]);                     printf("%d后继为%d\n",L->data[i],L->data[i+1]);                 }         }     }     return 0; }  int main() {     int i,item;     Sequenlist*L;     L=(Sequenlist*)malloc(sizeof(Sequenlist));     InitList(L);     Judge(L);     printf("依次在顺序表尾部(第n+1位，n位线性表长度)插入数据元素\n");     Insert(L);     printf("\n删除第i个元素,请输入i:");     scanf("%d",&i);     printf("删除第%d个元素\n",i);     DelItem(L,i);     printf("\n在线性表的第i位插入数据item,请输入i和item:");     scanf("%d%d",&i,&item);     InsItem(L,i,item);     printf("\n在线性表中查找值为item的元素在第几位,请输入item:");     scanf("%d",&item);     LocItem1(L,item);     printf("\n在线性表中查找值为item的元素在第几位,请输入item:");     scanf("%d",&item);     LocItem2(L,item);     printf("\n查找线性表中值为item的元素的前驱元素以及后继元素的值,请输入item:");     scanf("%d",&item);     LocItem3(L,item);     return 0; }

user: user-2
content: 把循环里的L->last++放到循环外面=L->last+N，循环条件部分为<=

user: user-2
content: 你插入函数里面的循环永远不会结束，你洗仔细看看

user: user-0
content: 不是啊  last是记录最后一个数据的  N是插入的个数 应该是不一样的

user: user-2
content: 你理解错了吧，题里面所谓的，N就是你在结构体内定义的last吧……

user: user-2
content: 你理解错了吧，题里面所谓的，N就是你在结构体内定义的last吧……

user: user-2
content: 分配内存的函数返回值为 Sequenlist *  不是 int     for(i=L->last;i<L->last+N;i++)          {              scanf("%d",&x);              L->data[i]=x;              L->last++;          } L->last+N如果大于Max怎么办？。。。。

user: user-0
content: 建立一张顺序存储结构的线性表(顺序表)，表中数据元素为整型数，能够存储的最大元素数量为50。在该顺序表上依次完成以下操作： （1）判定线性表是否为空。 （2）依次在顺序表尾部(第n+1位，n位线性表长度)插入数据元素：15、207、36、79、21、97、652、109、66、81，然后输出整张线性表（依次输出所有元素）。 （3）删除第5个元素，然后输出整张线性表。 （4）在线性表的第3位插入数据92，然后输出整张线性表。 （5）在线性表中查找值为79的元素，如果存在输出它是第几位，不存在输出提示信息。 （6）线性表中查找值为31的元素，如果存在输出它是第几位，不存在输出提示信息。 （7）查找线性表中，值为652的元素的前驱元素以及后继元素的值。

user: user-2
content: 你们的作业要求是什么啊？

user: user-0
content: 我写的是线性表顺序表  不是链式的  我们的作业要求是写顺序表

user: user-3
content: 链表的成员中除了数据域，应当还有指向下个结点的指针域！！！！   #include<stdio.h> #include<malloc.h> #include<stdlib.h>    typedef struct node { 	int data; 	struct node *pnode; }*PNODE,NODE;  PNODE CreateList( int ); int LengthList(PNODE );								 void ShowList( PNODE );									 PNODE InsertList(PNODE ,PNODE ,int);   int main(int argc ,char *argv[]) { 	int len ,posi; 	PNODE pHead = NULL; 	PNODE pEle = (PNODE )malloc(sizeof(NODE)); 	printf("请输出链表长度 len ="); 	scanf("%d",&len); 	pHead = CreateList(len); 	ShowList(pHead); 	if(pEle == NULL) 	{ 		printf("分配内存失败，程序结束"); 		exit(-1); 	} 	pEle->data = 100; 	printf("请输入插入位置 posi ="); 	scanf("%d",&posi); 	if(!InsertList(pHead ,pEle, posi)) 		free(pEle); 	ShowList(pHead); 	getchar(); 	return 0; }   /* 	函数功能：创建一个由用户指定的链表并返回链表的头结点 */ PNODE CreateList(int len) { 	PNODE pHead = (PNODE)malloc(sizeof(NODE));			//创建头结点 	PNODE pTemp = pHead;								//临时指针 	int val = 0;								 	if( len <= 0) 	{ 		printf("传入数值有误，链表创建失败\n"); 		exit(-1); 	} 	 	if(pHead == NULL) 	{ 		printf("程序分配内存失败，程序结束\n"); 		exit(-1); 	} 	 	pTemp ->pnode =	NULL; 	while(len--) 	{ 		pTemp ->pnode = (PNODE) malloc(sizeof(NODE)); 		if(pTemp ->pnode ==NULL) 			{ 				printf("程序分配内存失败，程序结束\n"); 				exit(-1); 			} 		printf("请输入数据 val = "); 		scanf("%d",&val); 		pTemp ->pnode ->data = val; 		pTemp ->pnode ->pnode = NULL; 		pTemp = pTemp ->pnode ; 	} 	return pHead; }   /* 	函数功能：显示链表数据域 */ void ShowList(PNODE pHead ) { 	PNODE pTemp = pHead; 	while(pTemp ->pnode !=NULL) 	{ 		printf("%-6d",pTemp ->pnode ->data); 		pTemp = pTemp ->pnode; 	} 	printf("\n"); 	return ; }  /*     函数功能：测量链表长度 */ int LengthList(PNODE pHead ) { 	int i = 0; 	PNODE pTemp = pHead ; 	while(pTemp ->pnode !=NULL) 	{ 		pTemp = pTemp ->pnode; 		i++; 	} 	return i; } /* 	函数功能：在链表的posi位置插入链表 				返回首地址 */ PNODE InsertList(PNODE pHead ,PNODE pEle ,int posi) { 	PNODE pTemp = pHead; 	int len = LengthList(pHead); 	if(posi < 0 || posi > len )		 		return false; 	 	if(posi ==0)			//首结点插入 	{ 		pEle ->pnode = pHead ->pnode; 		pHead ->pnode = pEle;  	} 	else 	{ 		while(posi --) 			pTemp = pTemp ->pnode; 		pEle ->pnode = pTemp ->pnode; 		pTemp ->pnode = pEle; 	} 	return pHead; }   这里没有写删除部分。不过删除很简单 通过传入的头结点地址来遍历链表 找到对应元素然后改变前一个结点的指针域并释放查找元素空间！

user: user-0
content: 还是不行啊 为什么建立线性表并判定线性表是否为空 不能执行 还有插入Insert 函数也不行 能帮我看下吗

user: user-4
content: #include<stdio.h> #include<malloc.h> #define MAXSIZE 50 #define N 10 typedef int elemtype; typedef struct {     elemtype data[MAXSIZE];     int last; } Sequenlist;  Sequenlist* InitList(Sequenlist*L) {     L=(Sequenlist*)malloc(sizeof(Sequenlist));     L->last=0;     return(L); //L是一个指针，返回类型自然要是指针类型。 }  int Judge(Sequenlist*L) {     if(L->last==0)     {         printf("List is empty.\n");     }     return 0; }  int Insert(Sequenlist*L) {     int x,i;     if(L->last==MAXSIZE-1)     {         printf("overflow.\n");         return 0;     }     else     {         printf("Input %d data:\n");         for(i=L->last; i<L->last+N; i++)         {             scanf("%d",&x);             L->data[i]=x;             L->last++;         }     }     for(i=0; i<L->last; i++)         printf("%d",L->data[i]);     return 0; }  int DelItem(Sequenlist*L,int i) {     int j;     if(L->last==0)     {         printf("List is empty.\n");         return 0;     }     else if((i<1)||(i>=L->last))     {         printf("Delete item fail.\n");         return 0;     }     else     {         for(j=i; j<=L->last-1; j++)             L->data[j-1]=L->data[j];         L->last--;         for(i=0; i<L->last; i++)             printf("%d",L->data[i]);         return 0;      } }  int InsItem(Sequenlist*L,int i,elemtype item) {     int j;     if(L->last==0)     {         printf("List is empty.\n");         return 0;     }     else if((i<1)||(i>L->last))     {         printf("Insert item fail.\n");         return 0;     }     else     {         for(j=L->last; j>=i; j--)             L->data[j]=L->data[j-1];         L->last++;         for(i=0; i<L->last; i++)             printf("%d",L->data[i]);         return 0;     } }  int LocItem1(Sequenlist*L,elemtype item) {     int i,j;     j=L->last;     if(j==0)     {         printf("List is empty.\n");         return 0;     }     for(i=0; i<j; i++)     {         if(L->data[i]==item)         {             return(i+1);         }     }     printf("The item is not in this sequenlist");     return 0; }  int LocItem2(Sequenlist*L,elemtype item) {     int i,j;     j=L->last;     if(j==0)     {         printf("List is empty.\n");         return 0;     }     for(i=0; i<j; i++)     {         if(L->data[i]==item)         {             return(i+1);         }     }     printf("The item is not in this sequenlist");     return 0; }  int LocItem3(Sequenlist*L,elemtype item) {     int i,j;     j=L->last;     if(j==0)     {         printf("List is empty.\n");         return 0;     }     for(i=0; i<j; i++)     {         if(L->data[i]==item)         {             printf("前驱为%d",L->data[i-1]);             printf("后继为%d",L->data[i+1]);         }     }     printf("The item is not in this sequenlist");     return 0; }  int main() {     int i,item;     Sequenlist*L;     int InitList(Sequenlist*L);     int Judge(Sequenlist*L);     printf("依次在顺序表尾部(第n+1位，n位线性表长度)插入数据元素\n");     int Insert(Sequenlist*L);     printf("删除第i个元素,请输入i:");     scanf("%d",&i);     printf("删除第%d个元素\n",i);     int DelItem(Sequenlist*L,int i);     printf("在线性表的第i位插入数据item,请输入i和item:");     scanf("%d%d",&i,&item);     int InsItem(Sequenlist*L,int i,elemtype item);     printf("在线性表中查找值为item的元素在第几位,请输入item:");     scanf("%d",&item);     int LocItem1(Sequenlist*L,elemtype item);     printf("在线性表中查找值为item的元素在第几位,请输入item:");     scanf("%d",&item);     int LocItem2(Sequenlist*L,elemtype item);     printf("查找线性表中，值为item的元素的前驱元素以及后继元素的值,请输入item:");     scanf("%d",&item);     int LocItem3(Sequenlist*L,elemtype item);     return 0;  }  帮你改了改

user: user-5
content: int InitList(Sequenlist*L) {     L=(Sequenlist*)malloc(sizeof(Sequenlist));     L->last=0;     return(L); } 这段代码的返回至应该是 Sequenlist* 因为malloc返回指像所分配内存的指针