日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

順序表的基本操作

 龍駒游子 2009-03-13
數(shù)字順序表
#include<stdio.h>
#include<malloc.h>
/* 定義ElemType為int類型 */
typedef int ElemType;
#define TRUE 1
#define FALSE 0
#define flag -1
/* 單鏈表的結(jié)點類型 */
typedef struct LNode
{ElemType data;
struct LNode *next;
} LNode,*LinkedList;
/* 初始化單鏈表 */
LinkedList LinkedListInit()
{LinkedList L;
L=(LinkedList)malloc(sizeof(LNode));
L->next=NULL;
return L;
}
/* 清空單鏈表 */
void LinkedListClear(LinkedList L)
{L->next=NULL;
printf("鏈表已經(jīng)清空\n");
}
/* 檢查單鏈表是否為空 */
int LinkedListEmpty(LinkedList L)
{if(L->next==NULL) return TRUE;
else return FALSE;
}
/* 遍歷單鏈表 */
void LinkedListTraverse(LinkedList L)
{LinkedList p;
p=L->next;
if(p==NULL) printf("單鏈表為空表\n");
else
{printf("鏈表中的元素為:\n");
while(p!=NULL)
{printf("%d ",p->data); p=p->next;}
}
printf("\n");
}
/* 求單鏈表長度 */
int LinkedListLength (LinkedList L)
{LinkedList p;
int j;
p=L->next;
j=0;
while(p!=NULL)
{ j++;p=p->next; }
return j;
}
/* 從鏈表中查找元素 */
LinkedList LinkedListGet(LinkedList L,int i)
{LinkedList p;int j;
p=L->next; j=1;
while (p!=NULL && j<i )
{p=p->next; j++; }
if (j==i) return p;
else return NULL;
}
/* 從鏈表中查找與給定元素值相同的元素在順序表中的位置 */
int LinkedListLocate ( LinkedList L, ElemType x)
{LinkedList p;int j;
p=L->next; j=1;
while ( p!=NULL && p->data != x)
{p=p->next;j++;}
if(p) return j;
else return 0;
}
/* 向鏈表中插入元素 */
void LinkedListInsert(LinkedList L, int i, ElemType x)
{LinkedList p,s;
int j;
j=1;p=L;
while(p&&j<i)
{p=p->next;j++;}
if(p==NULL||j>i)
printf("插入位置不正確\n");
else {s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=p->next;
p->next=s;
printf("%d已插入到鏈表中\(zhòng)n",x);
}
}
/* 從鏈表中刪除元素 */
void LinkedListDel(LinkedList L,int i)
{ LinkedList p,q;
int j;
j=1;p=L;
while(p->next&&j<i)
{p=p->next;j++;}
if(p->next==NULL)
printf("刪除位置不正確\n");
else {q=p->next;p->next=q->next;free(q);
printf("第%d個元素已從鏈表中刪除\n",i);
}
}

/*建立單鏈表*/
LinkedList LinkedListCreat( )
{ LinkedList L=LinkedListInit(),p,r;
ElemType x;
r=L;
printf("請依次輸入鏈表中的元素,輸入-1結(jié)束\n");
scanf("%d",&x);
while (x!=flag)
{p=(LinkedList)malloc(sizeof(LNode));
p->data=x;
r->next=p;
r=p;
scanf("%d",&x);
}
r->next=NULL;
return L;
}

int scan()
{int d;
printf("請選擇要進行的操作\n");
printf("1.初始化 2.清空 3.求鏈表長度 4.檢查鏈表是否為空\n");
printf("5.遍歷鏈表 6.從鏈表中查找元素\n");
printf("7.從鏈表中查找與給定元素值相同的元素在順序表中的位置\n");
printf("8.向鏈表中插入元素 9. 從鏈表中刪除元素\n");
printf("10.建立單鏈表\n");
printf("其他鍵退出。。。。。\n");
scanf("%d",&d);
return(d);
}
void main()
{
int quit=0;
int i,locate;
ElemType e;
LinkedList L,p;
while(!quit)
switch(scan())
{case 1:L=LinkedListInit();printf("\n");break;
case 2:LinkedListClear(L);printf("\n");break;
case 3:printf("鏈表的長度為 %d\n",LinkedListLength(L));break;
case 4:if(LinkedListEmpty(L))printf("鏈表為空\n");else printf("鏈表非空\n");break;
case 5:LinkedListTraverse(L);
break;
case 6:printf("請輸入待查詢元素在鏈表中的位置:");
scanf("%d",&i);
p=LinkedListGet(L,i);
if(p) printf("鏈表中第%d個元素的值為:%d\n",i,p->data);
else printf("查詢位置不正確\n");
break;
case 7:printf("請輸入待查詢元素的值:");
scanf("%d",&e);
locate=LinkedListLocate(L,e);
if(locate)
printf("%d在鏈表中的位置是:%d\n",e,locate);
else printf("鏈表中沒有值為%d的元素\n",e);
break;
case 8:printf("請輸入插入元素的位置和值(中間以空格或回車分隔):\n");
scanf("%d%d",&i,&e);
LinkedListInsert(L,i,e);
break;
case 9:if(LinkedListLength(L)==0)
printf("鏈表已經(jīng)為空,不能刪除\n");
else {printf("請輸入待刪除元素的位置:\n");
scanf("%d",&i);
LinkedListDel(L,i);}
break;
case 10:L=LinkedListCreat();
printf("\n");break;
default:quit=1;}
}
字母順序表
#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
typedef char elemtype;
typedef struct
{int listsize;
elemtype *elem;
int length;
}sqlist;                       /*順序表類型定義*/
void creat_list(sqlist *l,int n)                                              /*1順序表的初始化*/
{
int i;
l->elem=(char*)malloc(maxsize*sizeof(char));
l->length=0;  //初始容量
l->listsize=maxsize;  //最大容量
printf("請依次輸入%d個元素",n);
for(i=0;i<=n;i++)
{scanf("%c",&(l->elem[i]));
 (l->length)++;}
}
void printlist(sqlist *l)  //輸出順序表元素
{
int i;
printf("順序表為:");
for(i=0;i<l->length;i++)
printf("%c",l->elem[i]);
printf("\n");
}

void listdelete(sqlist *l,int i)                /*順序表L中刪除第I個元素*/
{
int j;
for(j=i;j<l->length-1;j++)
l->elem[j]=l->elem[j+1];
(l->length)--;
}
void listinsert(sqlist *l,int i,elemtype e)         /*9在順序表L中第I個位置上插入元素E*/
{
int j;
(l->length)++; /*順序表長度增1*/
for(j=l->length;j>i;j--)             /*將elem[i]及后面元素后移一個位置*/
   l->elem[j]=l->elem[j-1];
     l->elem[i]=e;                  
}
int locateelem(sqlist *l,elemtype e)            /*在順序表L中查找元素E*/
{
int i=0;
while(i<l->length&&l->elem[i]!=e) i++;
if(i>=l->length)
   return 0;
else
   return i;
}
int choose()
{int d;
printf("請選擇要進行的操作\n");
printf("初始化(1)\n輸出列表(2)\n");
printf("查詢元素(3)\n");
printf("從鏈表中刪除元素(4)\n向鏈表中插入元素(5)\n:");
printf("其他鍵退出\n");
scanf("%d",&d);
return(d);
}
void main()
{
sqlist l;
elemtype e,m;
int i,n,p,f;
f=0;
 while(!f)
switch(choose())
{
case 1:printf("請輸入該順序表的長度(小100):\n");
scanf("%d",&n);
creat_list(&l,n);
printf("\n");break;
case 2:printlist(&l);break;
case 3:printf("請輸入要查詢的字母\n");
scanf("%c",&e);
e=getchar();
printf("元素的位置%c=%d\n",e,locateelem(&l,e));
break;
case 4:printf("請輸入刪除元素的位置:\n");
scanf("%d",&i);
listdelete(&l,i);
printlist(&l);
break;
case 5:printf("請輸入要插入位置n和元素m\n");
scanf("%d %c",&n,&m);
if(n<1||n>l.length)
printf("ERROR");
else if(l.length>=l.listsize) printf("ERROR");
else {listinsert(&l,n,m);printlist(&l);}
break;
default :f=1;
}
}

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約