順序表
/*
*author:zylg
* fuction introduce
* displayList* head)
* insertList()
* deleteList()
* reverseList()
* deleteSameList()
*注意:檢查上下的溢出
*
*/
#include<stdlib.h>
#include <iostream>
#include<string>
#include<iomanip>
using namespace std;
typedef int datatype;
#define maxsize 1024
typedef struct
{
datatype data[maxsize];
int last;
}sequenlist;
void displayList(sequenlist *head)
{
int i=0;
while(i<=head->last)
{
cout<<i<<":"<<head->data[i]<<endl;
++i;
}
}
void inserList(sequenlist *head,datatype data,int n)
{
if(n<1 || head->last>=maxsize-1 || n>head->last+1)return;
for(int i=head->last;i>=n-1;--i)
{
head->data[i+1]=head->data[i];
}
head->data[n-1]=data;
head->last++;
}
void deleteList(sequenlist *head,int n)
{
if(n>head->last+1 || n<1 || head->last<0) {cout<<"出現錯誤";return;}
for(int i=n-1;i<=head->last;i++)
{
head->data[i]=head->data[i+1];
}
head->last--;
}
void reverseList(sequenlist *head)
{
for(int i=0;i<head->last;i++)
{
datatype x=head->data[i];
head->data[i]=head->data[head->last-i];
head->data[head->last-i]=x;
++i;
}
}
void deleteSameList(sequenlist *head)
{
for(int i=0;i<head->last;i++)
{
for(int j=i+1;j<head->last;j++)
{
if(head->data[i]==head->data[j]){deleteList(head,j);j--;}
}
}
}
int main()
{
sequenlist link;
for(int i=0;i<10;i++)
{
link.data[i]=i+1;
link.last=i;
}
inserList(&link,100,1);
deleteList(&link,1);
reverseList(&link);
reverseList(&link);
inserList(&link,1,9);
deleteSameList(&link);
displayList(&link);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
#define maxsize 1024
typedef struct
{
datatype data[maxsize];
int last;
}sequenlist;
int INSERT(sequenlist *L, int x, int i)
{
int j;
if ((*L).last >= maxsize - 1) { printf("overflow\n"); }
else
{
if (i<1 || i>(*L).last + 1) { printf("location is error\n"); }
else
{
for (j = (*L).last;j >= i - 1;j--)
{
(*L).data[j + 1] = (*L).data[j];
}
(*L).data[i - 1] = x;
(*L).last = (*L).last + 1;
}
}
return 1;
}
int DELETE(sequenlist *L, int i)
{
int j = 0;
if ((*L).last < 0) { printf("This sequenlist is null!\n"); }
else
{
if (i<1 || i>(*L).last + 1) { printf("Input error!\n"); }
else
{
for (j = i - 1;j <= (*L).last;j++)
{
(*L).data[j] = (*L).data[j + 1];
}
(*L).last--;
}
}
return 1;
}
void listprint(sequenlist *L) /*輸出線性表*/
{
int i;
for (i = 0;i<(*L).last;i++)
printf("i,e=%d,%d\n", i, L->data[i]);
}
int LOCATE(sequenlist *L, int x)
{
int i, j;
for (i = 0;i<maxsize - 1;i++)
{
j = i;
if ((*L).data[i] == x) { return j + 1; }
}
return 0;
}
int DIVERSE(sequenlist* L)
{
int i = 0, x;
for (;i<(*L).last / 2;)
{
x = (*L).data[i];
(*L).data[i] = (*L).data[(*L).last - 1 - i];
(*L).data[(*L).last - 1 - i] = x;
i++;
x = (*L).data[i];
}
return 1;
}
int DELSAME(sequenlist* L)
{
int i, j;
if ((*L).last == 1)
{
printf("only have one data.\n");
}
else
{
for (i = 0;i<(*L).last -1;i++)
{
for (j = i+1;j<(*L).last;j++)
{
if ((*L).data[i] == (*L).data[j]) { DELETE(L, j+1);j--;}
}
}
}
return 1;
}
void delsame(sequenlist *L)
{
int j = 1;
int i = 0;
int len = 1;
while (j<L->last)
{
for (i = 0;i<len;i++)
{
if (L->data[i] == L->data[j])
break;
}
if (i == len)
L->data[len++] = L->data[j++];
else
j++;
}
L->last = len;
}
void main()
{
int f;
int i = 0,j;
sequenlist q ;
system("color 0A");
printf("please input nuber for sequencelist(0 to end):\n");
for(i=0;i<maxsize;i++)
{
scanf("%d",&q.data[i]);
q.last=i+1;
if(q.data[i]==0){ DELETE(&q, i+1);break;}
}
while (1)
{
printf("please choose the number\n");
printf("\t 1.add squenlist.\n");
printf("\t 2.delete squenlist.\n");
printf("\t 3.find the location.\n");
printf("\t 4.diverse sequan.\n");
printf("\t 5.del the same sequen.\n");
printf("\t 6.browser sequen.\n");
printf("\t 0.exit.\n");
scanf("%d", &f);
switch (f)
{
case 1: {printf("please input add number and locate.\n");scanf("%d %d", &i, &j);INSERT(&q, i, j);system("pause");break;}
case 2: {printf("please input delete locate.\n");scanf("%d", &i);DELETE(&q, i);system("pause");break;}
case 3: {printf("please input sequen for find.\n");scanf("%d", &i); printf("location is:%d\n",LOCATE(&q, i));system("pause");break;}
case 4: {printf("diverse sequan.\n");DIVERSE(&q);system("pause");break;}
case 5: {printf("del the same sequen.\n");DELSAME(&q);system("pause");break;}
case 6: {printf("browser sequen.\n");listprint(&q);system("pause");break;}
}
if (f == 0) { break; }
system("cls");
}
}