列表C语言,c++语言表
C语言动态创建列表问题
main函数作如下修改,就能正常运行。输入数据的时候,以-1作为结束标志。
int?main(void){
struct?point?*a,*p;
struct?point?*head=NULL;
int?b[100],j,i=0,x;???/*修改过的地方,新定义了变量x*/
scanf("%d",x);???/*修改过的地方*/
while(x!=-1){
b[i]=x;
scanf("%d",x);???/*修改过的地方*/
i++;}
a=(struct?point?*)malloc(sizeof(struct?point));/*修改过的地方*/
for(j=0;ji/2;j++){
a-x=b[(2*j)];
a-y=b[(2*j)+1];
a-next=NULL;
if(head==NULL)
head=a;
else{
p-next=a;
p=a;}
print(head);
}
}
C语言动态列表排序
链表吗?以前练习的时候做过一个,你参考下
#includestdio.h
#includestdlib.h
#includeiostream.h
#define OK 1;
#define ERROR 0;
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList L,int n) //创建表
{
int i;
LNode *p;
L=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
for(i=n;i0;i--)
{
p=(LinkList)malloc(sizeof(LNode));
printf("输入第%d个元素的值\n",i);
scanf("%d",p-data);
p-next=L-next;
L-next=p;
}
printf("创建成功!\n");
}
Status GetElem(LinkList L,int i) //得到第i个元素
{
ElemType j=1,e;
LNode *p;
p=L-next;
while(jip)
{
p=p-next;
j++;
}
if(!p||ji)
{
printf("第%d个元素不存在!\n",i);
return ERROR;
}
e=p-data;
printf("第%d个元素是%d\n",i,e);
return OK;
}
Status ListInsert(LinkList L,int i,ElemType e) //插入元素
{
ElemType j;
LNode *p,*s;
p=L;
j=1;
while(pji)
{
p=p-next;
++j;
}
if(!p||ji)
{
printf("不能在第%d中插入\n",i);
}
s=(LinkList)malloc(sizeof(LNode));
s-data=e;
s-next=p-next;
p-next=s;
return OK;
}
Status ListDelete(LinkList L,int i) //删除元素
{
LNode *p,*q;
p=L;
int j=0;
while(p-nextji-1)
{
p=p-next;
j++;
}
if(!(p-next)||ji-1)
{
printf("查找失败!\n");
return ERROR;
}
q=p-next;
p-next=q-next;
free(q);
printf("删除成功!\n");
return OK;
}
void MergeList(LinkList La,LinkList Lb,LinkList Lc) //归并
{
LNode *pa,*pb,*pc;
Lc=pc=La;
pa=La-next;
pb=Lb-next;
while(papb)
{
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;
printf("归并成功!\n");
}
void PList(LinkList L) //打印
{
LNode *p;
p=L-next;
while(p)
{
printf("%d ",p-data);
p=p-next;
}
printf("\n");
}
Status CList(LinkList L) //排序
{
LNode *p;
int flag,e;
p=L;
while(1)
{
flag=0;
for(p=L;p-next-next!=NULL;p=p-next)
{
if(p-next-datap-next-next-data)
{
e=p-next-data;
p-next-data=p-next-next-data;
p-next-next-data=e;
flag=1;
}
}
if(flag==0)
{
printf("排序成功!\n");
return OK;
}
}
}
int main()
{
int count=1,m,n,k,sum,i,j,g;
LinkList list[10];
printf("输入创建表的个数\n");
scanf("%d",m);
for(;count=m;count++)
{
printf("输入第%d个表的元素个数\n",count);
scanf("%d",n);
printf("逆序输入n个元素\n");
CreateList(list[count],n);
printf("第%d个表创建成功\n",count);
}
sum=m+1;
while(1)
{
printf("功能:\n1.查找某位置元素的值\n2.插入元素\n3.删除元素\n4.元素排序\n5.两表合并\n6.显示表内元素\n7.退出\n");
scanf("%d",k);
switch(k)
{
case 1:
printf("输入查找的表\n");
scanf("%d",i);
if(im)
{
printf("不存在表%d\n",i);
break;
}
printf("输入查找位置\n");
scanf("%d",j);
GetElem(list[i],j);
break;
case 2:
printf("输入要插入的表\n");
scanf("%d",i);
if(im)
{
printf("不存在表%d\n",i);
break;
}
printf("输入要插入的位置\n");
scanf("%d",j);
printf("输入要插入的值\n");
scanf("%d",g);
ListInsert(list[i],j,g);
break;
case 3:
printf("输入要删除的表\n");
scanf("%d",i);
if(im)
{
printf("不存在表%d\n",i);
break;
}
printf("输入要删除的位置\n");
scanf("%d",j);
ListDelete(list[i],j);
break;
case 4:
printf("输入要排序的表\n");
scanf("%d",i);
if(im)
{
printf("不存在表%d\n",i);
break;
}
CList(list[i]);
break;
case 5:
printf("输入表1\n");
scanf("%d",i);
if(im)
{
printf("不存在表%d\n",i);
break;
}
printf("输入表2\n");
scanf("%d",j);
if(im)
{
printf("不存在表%d\n",j);
break;
}
MergeList(list[i],list[j],list[sum]);
printf("已经将合并的标放入第%d个表中",sum);
sum++;
m++;
break;
case 6:
printf("输入要显示的表\n");
scanf("%d",i);
if(im)
{
printf("不存在表%d\n",i);
break;
}
PList(list[i]);
break;
case 7:
return 0;
default:
printf("错误的指令!/n");
break;
}
}
}
C语言中顺序列表的插入删除程序
#include stdio.h
#include stdlib.h
#include string.h
#define MaxSize 50
#define len(x) sizeof(x)/sizeof(x[0])
typedef struct SqList
{
int data[MaxSize];
int length;
}SqList;
static SqList Create(int a[],int n);//用一个数组创建静态顺序表
static void Print(SqList L);//打印一个静态顺序表
static void ListInsert(SqList *p,int i,int e);//L的第i个位置插入e
static void ListDelete(SqList *p,int i);//删除列表第i个数据
static int LocateElem(SqList L,int e);//查找第一个值等于e的元素,返回其位序
static void Reverse(SqList *p,int left,int right);//逆置表的第left到right的元素顺序
/*递增序列折半查找等于e的元素,返回其位序*/
static int Binsearch(SqList L,int e);
int main()
{
int a[]={1,2,3,4};
SqList L=Create(a,len(a));
ListInsert(L,2,100);
ListDelete(L,2);
Reverse(L,1,4);
Print(L);
printf("%d\n",Binsearch(L,2));
}
static SqList Create(int a[],int n)
{
SqList L;
int i;
L.length=n;
for(i=0;iL.length;i++)
L.data[i]=a[i];
return L;
}
static void Print(SqList L)
{
int i;
for(i=0;iL.length;i++)
printf("%d ",L.data[i]);
printf("\n");
}
static void ListInsert(SqList *p,int i,int e)
{
int j;
if(i1 || ip-length+1)
{printf("错误范围\n");}
if(p-length=MaxSize)
{printf("存储空间已满\n");}
for(j=p-length;j=i;j--)
p-data[j]=p-data[j-1];
p-data[i-1]=e;
p-length++;
}
static void ListDelete(SqList *p,int i)
{
if(i1 || ip-length)
{printf("删除范围出错\n");return;}
while(ip-length)
{
p-data[i-1]=p-data[i];i++;
}
p-length--;
}
static int LocateElem(SqList L,int e)
{
int i;
for(i=0;iL.length;i++)
if(L.data[i]==e)
return i+1;
return 0;
}
static void Reverse(SqList *p,int left,int right)
{
int temp;
if(leftright || left1 || rightp-length)
{printf("错误的输入\n");return;}
for(left--,right--;leftright;left++,right--)
{
temp=p-data[left];
p-data[left]=p-data[right];
p-data[right]=temp;
}
}
static int Binsearch(SqList L,int e)
{
int mid,low=0,high=L.length-1;
while((low+1)!=high)
{
mid=(low+high)/2;
if(L.data[mid]==e) return mid+1;
if(eL.data[mid]) high=mid;
if(eL.data[mid]) low=mid;
}
return 0;
}
ListInsert 和 ListDelete 为你所要的函数
C语言如何返回选择列表
1、如果只是想返回已经写好的主菜单页面的话
可以直接在当前函数中结束位置调用主菜单所在的函数,如果想输入某值返回的话
就加个输入提示
比如
在其他函数页面加上“输入0返回主菜单”就可以在任意时候
输入0来返回
当然实现的时候也是输入语句加判断语句
加调用主菜单所在函数,调用前先调用清屏函数。
2、例程:
#include
int menu()
{ int rt;
char str[256];
printf("1 ****\n");
printf("2 ****\n");
printf("3 ****\n");
printf("4 ****\n");
printf("5 退出程序\n");
printf("请选择,输入选项前面的数字后回车: "); scanf("%s",str);
if ( str[0]='1' str[0]='5' ) rt=str[0]-'0'; else rt=0;
return rt;
}
void f1() {}
void f2() {}
void f3() {}
void f4() {}
void main()
{ int s,loop=1;
while ( loop )
{ s=menu();
switch ( s )
{ case 1: f1(); break;
case 2: f2(); break;
case 3: f3(); break;
case 4: f4(); break;
case 5: loop=0; break;
default: break;
}
}
}
c语言如何定义一个单项列表
#includeiostream
using?namespace?std;
struct?A
{
int?x;
A?*next;
};
A?*Head;//头指针
int?k=0;//记录创建链表个数
A?*J_L();//创建链表
void?B_J(A?*head,int?x);//比较大小
void?show(A?*head);//输出
void?main()
{
A?*t;
t=J_L();
B_J(t,k);
show(t);
}
void?B_J(A?*head,int?x)
{
A?*m,*n;
int?swap;
for(int?i=0;i(x-1);i++)
{
n=head;
m=n-next;
for(int?j=0;j(x-i-1);j++)
{
if((n-x)(m-x))
{swap=n-x;n-x=m-x;m-x=swap;}
n=n-next;
m=n-next;
}
}
}
void?show(A?*head)
{
A?*t=head;
while(t!=NULL)
{
coutt-xendl;
t=t-next?;
}
}
A?*J_L()
{
cout"请输入,0退出";
A?*?p=new?A;
k++;
A?*?d=Head=p;
cinp-x;
if(p-x==0)
{
k--;
delete?p;Head=0;p=0;
}
while(1)
{
cout"请输入,0退出";
p=new?A;
k++;
d-next=p;
cinp-x;
if(p-x==0)
{k--;delete?p;d-next=0;p=0;break;}
d=p;
}
return?Head;
}
c语言表示列表的问题
/*
抱歉,又是我
*/
//#define debug
struct dimension
{
int num_row ;
int num_col ;
} ;
void table_set_entry (const int t[] ,const struct dimension *dim ,const int row ,const int col ,const int v)
{
if (t == 0 || dim == 0 || row 0 || col 0 || row = dim-num_row || col = dim-num_col)
return ;
t[col * dim-num_row + row] = v ;
return ;
}
int table_get_entry (const int t[] ,const struct dimension *dim ,const int row ,const int col)
{
if (t == 0 || dim == 0 || row 0 || col 0 || row = dim-num_row || col = dim-num_col)
return 0 ;
return t[col * dim-num_row + row] ;
}
void table_clear (const int t[] ,struct dimension *dim)
{
if (t == 0 || dim == 0)
return ;
const int* pb = t ;
const int* pe = t + dim-num_row * dim-num_col ;
int* p ;
for (p = pb ; p pe ; p++)
*p = 0 ;
return ;
}
void table_copy (const int a[] ,const int b[] ,struct dimension *dim)
{
if (a == 0 || b == 0 || dim == 0)
return ;
const int* pab = a ;
const int* pae = a + dim-num_row * dim-num_col ;
int* pa ;
const int* pbb = b ;
int* pb ;
for (pa = pab ,pb = pbb ; pa pae ; pa++ ,pb++)
*pb = *pa ;
return ;
}
#ifdef debug
int main ()
{
void table_set_entry (const int t[] ,const struct dimension *dim ,const int row ,const int col ,const int v) ;
int table_get_entry (const int t[] ,const struct dimension *dim ,const int row ,const int col) ;
void table_clear (const int t[] ,struct dimension *dim) ;
void table_copy (const int a[] ,const int b[] ,struct dimension *dim) ;
int t[10][10] ;
int f[100] ;
const struct dimension dim = {10 ,10} ;
const int row = 4 ;
const int col = 7 ;
const int v = 250 ;
table_set_entry (t ,dim ,row ,col ,v) ;
printf ("isn't %d equal to %d ?\n" ,t[col][row] ,table_get_entry (t ,dim ,row ,col)) ;
table_copy (t ,f ,dim) ;
table_clear (t ,dim) ;
printf ("t : %d while f : %d\n" ,t[col][row] ,f[col * dim.num_row + row]) ;
return 0 ;
}
#endif