c语言顺序线性表的实现代码: 运行时没有错误,可是不能出现想要的结果,求高手修改!!!

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct{ int *elem;
int length;
int listsize;
}SqList;
int *newbase;

InitList_Sq(SqList &L){
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem) return 0;
L.length=0;
L.listsize=LIST_INIT_SIZE;
return 1;
}//InitList_Sq//

CreateList_Sq(SqList &L,int n){
L.length=n;
if(L.length>L.listsize){
newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) return 0;
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
for(int i=0;i<n;i++)
L.elem[i]=rand()%100+1;
return 1;
}

InsertList_Sq(SqList&L,int i,int e){
int *p,*q;
if(i<1||i>L.length+1) return 0;
if(L.length==L.listsize){
newbase=(int *)realloc(L.elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(int));
if(!newbase) return 0;
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
p=&(L.elem[i-1]);
for(q=&L.elem[L.length-1];q>=p;q--)
*(q+1)=*q;
*p=e;
++L.length;
return 1;
}

DeleteList_Sq(SqList &L,int i){
int *p;
if(i<1||i>L.length) return 0;
p=&(L.elem[i]);
for(p;p<(L.elem+L.length-1);p++)
*(p-1)=*p;
++L.length;
return 1;
}

OutputList_Sq(SqList L,int n)
{
if(L.length==0) printf("此表为空表!\n");
for(int i=0;i<n;i++)
printf("%d",L.elem[i]);
return 1;
}

int menu_select(){
int n;
printf("1:初始化一个线性表:\n");
printf("2:创建一个包含15个元素的线性表:\n");
printf("3:将一个数插入到第i个元素之前:\n");
printf("4:删除第i个元素:\n");
printf("5:输出线性表的每一个元素:\n");
do
{
printf("请输入选项代码n=1..6\n");
scanf("%d",&n);
}
while(n<0||n>6);
return n;

}

void main()
{
int n,i,e;
SqList L;
n= menu_select();
while(1){
switch(n){
case1: printf("初始化一个空表!\n"); InitList_Sq(L);OutputList_Sq(L,L.length);break;
case2: CreateList_Sq(L,15); OutputList_Sq(L,n);break;
case3: scanf("%d",i); e=rand(); InsertList_Sq(L,i,e);
OutputList_Sq(L,n);break;
case4: scanf("%d",i); DeleteList_Sq(L,i); OutputList_Sq(L,n);break;
case5: OutputList_Sq(L,n);break;
}
}
}
这是题目要求:1)编写完成下列功能的函数:(1)初始化一个线性表;(2)创建一个包含15个不大于100的正整数值的线性表(15个值由计算机随机产生);(3)将一个数插在第i个元素前(i在程序运行时输入);(4)删除第i个元素(i在程序运行时输入);(5)输出线性表中所有元素。
2)用主函数调用你所编写的函数,并在使线性表有所变化的每一步输出线性表的内容,以验证你编程序的正确性。

第1个回答  2011-09-18
你最好把你输入了什么,为什么判断程序出错给出来。这样别人好重现你的故障以便调试。啥都不说,就摆个代码出来,有什么用呀?
第2个回答  2011-09-19
修改如下:

//---------------------------------------------------------------------------

#include "stdio.h"
#include "stdlib.h"
typedef char DataType;
typedef struct node{
DataType data;
struct node *next;
}ListNode;
typedef ListNode *LinkList;
ListNode *p;
LinkList head;
LinkList GreatListRH(void)
{
DataType ch;
LinkList head;
ListNode *s,*r;
head=(ListNode *)malloc(sizeof(ListNode));
r=head;
printf("输入链表各结点的数据:\n");
while((ch=getchar())!='\n')
{
s=(ListNode *)malloc(sizeof(ListNode));
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head;
}
ListNode *LocateNode (LinkList head,DataType key)
{
ListNode *p=head->next;
while(p&&p->data!=key)
p=p->next;
return p;
}
void InsertList(LinkList head,DataType x,int i)
{
ListNode *p=head,*s;
int j;
for (j=0; j<i-1; j++) {
p=p->next;
}

if(p==NULL)

s=(ListNode *)malloc(sizeof(ListNode));
s->data=x,
s->next=p->next;
p->next=s;
}
void DeleteList(LinkList head,int i)
{
ListNode *p=head,*r;
int j;
for (j=0; j<i-1; j++) {
p=p->next;
}

if(p==NULL||p->next==NULL)

r=p->next;
p->next=r->next;
free(r);
}
void main()
{
ListNode *p,*s;
DataType key;
ListNode *q;
int i;
DataType x;

p=GreatListRH();
printf("输入链表各结点的数据:\n");
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");

printf("输入要查找的数据:");
scanf("%c",&key);
q=LocateNode(p,key);
if(q!=NULL)
printf("找到值为%c的结点:\n",key);
else
printf("没有找到值为%c的结点:\n",key);
printf("\n");

printf("输入要插入的数据和位置:");
fflush(stdin);
scanf("%c%d",&x,&i);
InsertList(p,x,i);
printf("在第%d个位置插入%c后链表各结点的数据:\n",i,x);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的插入
printf("输入要删除结点的位置:");
scanf("%d",&i);
DeleteList(p,i);
printf("在第%d个位置删除结点后链表各结点的数据:\n",i);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的删除
}
//---------------------------------------------------------------------------
第3个回答  2011-09-19
c语言顺序线性表的实现代码: 运行时没有错误,可是不能出现想要的结果,求高手修改!!!

去猪八戒找人帮你解决

希望楼主早日解决问题
相似回答