//---------------------------------------------------------------------------
成都創(chuàng)新互聯(lián)公司主營河西網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā)公司,河西h5重慶小程序開發(fā)公司搭建,河西網(wǎng)站營銷推廣歡迎河西等地區(qū)企業(yè)咨詢
#include stdio.h
#include stdlib.h
#include time.h
#define STY "%d"/*元素類型格式符*/
typedef int eltp;/*元素類型*/
typedef struct node{
eltp data;
struct node *next;
} node;
void init(void)
{
static int fg=1;
if (fg) {
srand(time(NULL));
fg=0;
}
}
node *insert(node *h,eltp d)
{
node *s=(node *)malloc(sizeof(node));
if (!h) {
s-data=d;
s-next=NULL;
h=s;
}
else {
h-next=insert(h-next,d);
}
return h;
}
node *create(int n)
{
node *h=NULL;
int i;
for (i = 0; in; i++) {
h=insert(h,rand()%100);
}
if (h) {
printf("線性表生成已完成!\n");
}
else {
fprintf(stderr,"線性表生成未成功\n");
exit(-1);
}
return h;
}
node *del(node *h,eltp d)
{
node *p;
if (hh-data==d) {
p=h;
h=h-next;
free(p);
}
else if (h) h-next=del(h-next,d);
return h;
}
int search(node *h,eltp d)
{
int i=1;
while (hh-data!=d)
{
h=h-next;
i++;
}
if (!h) i=-1;
return i;
}
int count(node *h)
{
int i=0;
for (i = 0; h; i++) {
h=h-next;
}
return i;
}
void prt(node *h)
{
while (h)
{
printf(STY"\t",h-data);
h=h-next;
}
putchar('\n');
}
void Free(node **h)
{
if (*h) {
Free((*h)-next);
free(*h);
*h=NULL;
}
}
int menu(void)
{
int i;
puts("******************");
puts("1.生成線性表");
puts("2.輸出表元素");
puts("3.刪除表元素");
puts("4.查找表元素");
puts("5.統(tǒng)計表元素");
puts("6.插入表元素");
puts("7.刪除線性表");
puts("0.退出本程序");
puts("******************");
printf("請選擇:");
scanf("%d",i);
return i;
}
void find(node *h)
{
eltp a;
//node *t=NULL;
int index;
printf("請輸入要查找的數(shù)字:");
scanf(STY,a);
index=search(h,a);
if (index!=-1) {
printf(STY"是表中的第%d個元素\n",a,index);
}
else printf(STY"不是表中的元素\n",a);
}
node *insert_node(node *h,int index,eltp a)
{
node *hd=h,*in=(node *)malloc(sizeof(node));
int i;
in-data=a;
if (index1) {
for (i=1; h-nextiindex-1; i++) {
h=h-next;
}
in-next=h-next;
h-next=in;
}
else {
in-next=hd;
hd=in;
}
return hd;
}
node *remove_node(node *h)
{
eltp a;
printf("請輸入要刪除的元素:");
scanf(STY,a);
h=del(h,a);
puts("已完成");
return h;
}
node *ins(node *h)
{
eltp a;
int i;
printf("請輸入要插入的元素:");
scanf(STY,a);
printf("請輸入要插入的位置:");
scanf("%d",i);
return insert_node(h,i,a);
}
int main(void)
{
node *head=NULL;
int ch;
init();
do
{
ch=menu();
switch (ch) {
default:printf("輸入有誤,重新輸入\n");break;
case 0:break;
case 1:if(head) Free(head);
head=create(10);
break;
case 2:prt(head);break;
case 3:head=remove_node(head);break;
case 4:find(head);break;
case 5:printf("表中共有%d個元素\n",count(head));break;
case 6:head=ins(head);break;
case 7:Free(head);break;
}
}while (ch);
Free(head);
return 0;
}
//---------------------------------------------------------------------------
第一個文件commom.h
#include stdio.h
#include stdlib.h
#include malloc.h
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
第二個文件seqlist.h
#define ElemType int
#define MAXSIZE 100 /*此處的宏定義常量表示線性表可能達到的最大長度*/
typedef struct
{
ElemType elem[MAXSIZE]; /*線性表占用的數(shù)組空間*/
int last; /*記錄線性表中最后一個元素在數(shù)組elem[ ]中的位置(下標值),空表置為-1*/
}SeqList;
第三個文件locate.cpp
#include "common.h"
#include "seqlist.h"
int Locate(SeqList L, ElemType e)
{
int i=0; /*i為掃描計數(shù)器,初值為0,即從第一個元素開始比較*/
while ((i=L.last)(L.elem[i]!=e)) /*順序掃描表,直到找到值為key的元素, 或掃描到表尾而沒找到*/
i++;
if (i=L.last)
return(i+1); /*若找到值為e的元素,則返回其序號*/
else
return(-1); /*若沒找到,則返回空序號*/
}
void main()
{
SeqList l;
int p,q,r;
int i;
printf("請輸入線性表的長度:");
scanf("%d",r);
l.last = r-1;
printf("請輸入線性表的各元素值:\n");
for(i=0; i=l.last; i++)
{
scanf("%d",l.elem[i]);
}
printf("請輸入要查找的元素值:\n");
scanf("%d",q);
p=Locate(l,q);
if(p == -1)
printf("在此線性表中沒有該元素!\n");
else
printf("該元素在線性表中的位置為:%d\n",p);
}
第四個文件InsList.cpp
#include "common.h"
#include "seqlist.h"
/*在順序表L中第i個數(shù)據(jù)元素之前插入一個元素e。 插入前表長n=L-last+1,
i的合法取值范圍是 1≤i≤L-last+2 */
int InsList(SeqList *L,int i,ElemType e)
{
int k;
if((i1) || (iL-last+2)) /*首先判斷插入位置是否合法*/
{
printf("插入位置i值不合法");
return(ERROR);
}
if(L-last= MAXSIZE-1)
{
printf("表已滿無法插入");
return(ERROR);
}
for(k=L-last;k=i-1;k--) /*為插入元素而移動位置*/
L-elem[k+1]=L-elem[k];
L-elem[i-1]=e; /*在C語言數(shù)組中,第i個元素的下標為i-1*/
L-last++;
return(OK);
}
void main()
{
SeqList *l;
int p,q,r;
int i;
l=(SeqList*)malloc(sizeof(SeqList));
printf("請輸入線性表的長度:");
scanf("%d",r);
l-last = r-1;
printf("請輸入線性表的各元素值:\n");
for(i=0; i=l-last; i++)
{
scanf("%d",l-elem[i]);
}
printf("請輸入要插入的位置:\n");
scanf("%d",p);
printf("請輸入要插入的元素值:\n");
scanf("%d",q);
InsList(l,p,q);
for(i=0; i=l-last; i++)
{
printf("%d ",l-elem[i]);
}
}
第五個文件DelList.cpp
#include "common.h"
#include "seqlist.h"
int DelList(SeqList *L,int i,ElemType *e)
/*在順序表L中刪除第i個數(shù)據(jù)元素,并用指針參數(shù)e返回其值。i的合法取值為1≤i≤L.last+1 */
{
int k;
if((i1)||(iL-last+1))
{
printf("刪除位置不合法!");
return(ERROR);
}
*e = L-elem[i-1]; /* 將刪除的元素存放到e所指向的變量中*/
for(k=i; i=L-last; k++)
L-elem[k-1] = L-elem[k]; /*將后面的元素依次前移*/
L-last--;
return(OK);
}
void main()
{
SeqList *l;
int p,r;
int *q;
int i;
l = (SeqList*)malloc(sizeof(SeqList));
q = (int*)malloc(sizeof(int));
printf("請輸入線性表的長度:");
scanf("%d",r);
l-last = r-1;
printf("請輸入線性表的各元素值:\n");
for(i=0; i=l-last; i++)
{
scanf("%d",l-elem[i]);
}
printf("請輸入要刪除的元素位置:\n");
scanf("%d",p);
DelList(l,p,q);
printf("刪除的元素值為:%d\n",*q);
}
第六個文件merge.cpp
#include "common.h"
#include "seqlist.h"
void merge(SeqList *LA, SeqList *LB, SeqList *LC)
{
int i,j,k;
i=0;j=0;k=0;
while(i=LA-lastj=LB-last)
if(LA-elem[i]=LB-elem[j])
{
LC-elem[k]= LA-elem[i];
i++;
k++;
}
else
{
LC-elem[k]=LB-elem[j];
j++;
k++;
}
while(i=LA-last) /*當表LA有剩余元素時,則將表LA余下的元素賦給表LC*/
{
LC-elem[k]= LA-elem[i];
i++;
k++;
}
while(j=LB-last) /*當表LB有剩余元素時,則將表LB余下的元素賦給表LC*/
{
LC-elem[k]= LB-elem[j];
j++;
k++;
}
LC-last=LA-last+LB-last+1;
}
void main()
{
SeqList *la,*lb,*lc;
int r;
int i;
la=(SeqList*)malloc(sizeof(SeqList));
printf("請輸入線性表A的長度:");
scanf("%d",r);
la-last = r-1;
printf("請輸入線性表A的各元素值:\n");
for(i=0; i=la-last; i++)
{
scanf("%d",la-elem[i]);
}
lb=(SeqList*)malloc(sizeof(SeqList));
printf("請輸入線性表B的長度:");
scanf("%d",r);
lb-last = r-1;
printf("請輸入線性表B的各元素值:\n");
for(i=0; i=lb-last; i++)
{
scanf("%d",lb-elem[i]);
}
lc=(SeqList*)malloc(sizeof(SeqList));
merge(la,lb,lc);
printf("合并后線性表C中的元素為:\n");
for(i=0; i=lc-last; i++)
{
printf("%d ",lc-elem[i]);
}
}
包含了線性表插入,查找,刪除,合并運算。
typedef int datatype;
#define maxsize 1024
typedef struct
{ ElemType data[MaxSize];
int length;
}SqList;
void InitList(SqList L)
{ L.length=0;
}
int GetLength(SqList L)
{return L.length;
}
int GetElem(SqList L,int i,ElemType e)
{ if (i1||iL.length)
return 0;
else
{ e=L.data[i-1];
return 1;
}
}
int Locate(SqList L,ElemType x)
{int i=0;
while (L.data[i]!=x)
i++;
if (iL.length)
return (0);
else
return(i+1);
}
int InsElem(SqList L,ElemType x,int i)
{ int j;
if(i1||iL.length+1)
return 0;
for(j=L.length;ji;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=x;
L.length++;
return 1;
}
int DelElem(SqList L,int i)
{ int j;
if(i1||iL.length)
return 0;
for(j=i;jL.length;j++)
L.data[j-1]=L.data[j];
L.length--;
return 1;
}void DispList(SqList L)
{ int i;
for(i=1;i=L.length;i++)
printf("%c",L.data[i-1]);
printf("\n");
}
void main()
{ int i;
ElemType e;
SqList L;
InitList(L);
InsElem(L,'a',1);
InsElem(L,'c',2);
InsElem(L,'a',3);
InsElem(L,'e',4);
InsElem(L,'d',5);
InsElem(L,'b',6);
printf("xian xing biao:");DispList(L);
printf("chang du:%d\n",GetLength(L));
i=3;GetElem(L,i,e);
printf("di %d ge yuan su :%c\n",i,e);
e='a';
printf("yuan su %c shi di %d ge yuan su\n",e,Locate(L,e));
i=4;printf("shan chu di %d ge yuan su\n",i);
DelElem(L,i);
printf("xian xing biao:");DispList(L);
}
網(wǎng)頁名稱:線性表基礎(chǔ)運算函數(shù)c語言 線性表基礎(chǔ)運算函數(shù)c語言表示
網(wǎng)站URL:http://jinyejixie.com/article12/dosgpdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、軟件開發(fā)、網(wǎng)站設(shè)計、商城網(wǎng)站、網(wǎng)站內(nèi)鏈、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)